开发者社区 > 大数据与机器学习 > 大数据计算 MaxCompute > 正文

maxcompute计算的时候脏数据会报错,能不能设置忽略脏数据?

maxcompute计算的时候脏数据会报错,能不能设置忽略脏数据?

展开
收起
冰激凌甜筒 2023-04-19 11:43:50 524 0
22 条回答
写回答
取消 提交回答
  • 是的,阿里云MaxCompute支持在计算过程中忽略脏数据。您可以在创建表时使用 set odps.sql.type.system.odps2=false; 命令来关闭 MaxCompute 的严格数据类型检查,这样将允许 MaxCompute 在遇到数据类型不匹配时插入 NULL 值,而不是抛出错误。

    例如,您可以使用以下命令创建一个允许 NULL 值的表:

    CREATE TABLE mytable (
      id BIGINT,
      name STRING,
      age INT
    ) LIFECYCLE 7
    PARTITIONED BY (dt STRING, country STRING)
    TBLPROPERTIES (
      "odps.sql.type.system.odps2" = "false"
    );
    

    关闭严格类型检查可能会导致数据质量问题。建议您在使用此功能时仔细评估其风险,并确保数据的准确性和完整性。

    2023-05-31 11:16:42
    赞同 1 展开评论 打赏
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    在MaxCompute中,当有脏数据(数据类型不匹配等异常数据)被加载到表中时,计算会失败并报错。但是,MaxCompute也提供了一种方式来忽略脏数据,即使用set odps.sql.type.system.odps2=false命令设置odps.sql.type.system.odps2参数为false,该参数默认为true。通过设置该参数来关闭ODPS2.0标准的类型校验,可以让计算继续运行并忽略脏数据。

    忽略脏数据会对计算结果产生影响,因此在选择是否忽略脏数据时,需要根据具体情况进行权衡。如果数据质量较差,建议先进行数据清洗,确保数据的完整性和正确性。

    2023-05-26 16:50:18
    赞同 展开评论 打赏
  • 无所不能的蛋蛋

    在 MaxCompute 的计算过程中,如果出现脏数据,可能会导致计算出错或产生不准确的计算结果。因此,MaxCompute 默认情况下是不支持忽略脏数据的。但是,在某些特定的情况下,需要临时禁用脏数据检查,可以使用特殊的设置来实现。

    具体地,如果您需要在 MaxCompute 计算时忽略脏数据,可以使用 MAXCOMPUTE_LOAD_ERROR_DISCARD 参数,该参数用来指定是否丢弃脏数据,其取值包括:

    • false(默认值)表示不丢弃脏数据,计算过程中如果发现脏数据则会报错;
    • true 表示丢弃脏数据,即在计算过程中忽略脏数据。

    该参数可以在 SQL 语句中使用,例如:

    SET MAXCOMPUTE_LOAD_ERROR_DISCARD=true;
    

    上面的语句将 MAXCOMPUTE_LOAD_ERROR_DISCARD 参数设置为 true,即在计算时忽略脏数据。

    需要注意的是,仅在特定的情况下才能使用该参数,例如在处理实时流式数据等场景中需要尽可能保证数据不出错,如果数据存在脏数据,可以使用该参数临时忽略脏数据。另外,在使用该参数时,需要特别注意是否会导致计算结果的不准确性,谨慎使用。

    总之,在 MaxCompute 的计算过程中,默认不支持忽略脏数据,但可以在特定情况下使用 MAXCOMPUTE_LOAD_ERROR_DISCARD 参数来实现忽略脏数据。

    2023-05-26 13:25:10
    赞同 展开评论 打赏
  • 从事java行业9年至今,热爱技术,热爱以博文记录日常工作,csdn博主,座右铭是:让技术不再枯燥,让每一位技术人爱上技术

    你好,建议先处理脏数据,你可以在MaxCompute客户端执行tunnel show bad ;命令查看脏数据。一旦出现脏数据,可以通过如下方法进行删除: 执行drop table ...;命令删除整张表或执行alter table ... drop partition;命令删除目标分区后,重新上传数据。 如果脏数据可以通过WHERE条件过滤出来,也可以通过INSERT+WHERE条件,把需要的数据导入到另一张新表或就地更新(源和目的分区/表名相同),然后在进行计算。

    2023-05-22 18:28:51
    赞同 展开评论 打赏
  • 在 MaxCompute 中,系统默认是不会跳过脏数据的,如果程序中有脏数据的话,作业会停止,并输出错误信息。

    不过,如果你希望在作业计算过程中忽略脏数据,则可以使用 MaxCompute 的脏数据过滤特性来实现。这个特性在表的创建时进行设置,在 CREATE TABLE 语句中指定 LIFECYCLE 参数来设置脏数据的最大寿命,脏数据的最大寿命过期后,将会自动删除。

    例如,可以在创建表时添加如下语句:LIFECYCLE 30,即设置脏数据的最大寿命为 30 天。这表示,如果一条数据在 30 天内没有被清理,MaxCompute 会自动将其丢弃。在这个过程中,MaxCompute 不会输出错误信息,但是会记录脏数据的数量和过期时间等信息,方便用户进行数据追溯和排查问题。

    需要注意的是,该特性适用于一些非关键业务的场景。如果你想保证作业的准确性和稳定性,则不应该忽略脏数据,而是应该尽可能保证输入数据的正确性。只有在一些特殊场景下,例如数据异常,数据质量低,或者某些数据源数据时效性较短等情况下,才应该考虑使用该特性来进行数据处理。

    2023-05-19 09:07:59
    赞同 展开评论 打赏
  • 发表文章、提出问题、分享经验、结交志同道合的朋友

    使用条件语句过滤脏数据:在计算任务中,可以使用条件语句来过滤掉脏数据,只处理有效的数据。例如,可以使用 WHERE 子句来设置条件,只选择满足特定条件的数据进行计算。

    使用异常处理机制:在计算任务中,可以使用 TRY-CATCH 结构捕获异常并进行处理。当遇到脏数据导致的错误时,可以在 CATCH 块中添加处理逻辑,例如记录日志或跳过错误数据继续计算。

    2023-05-18 16:08:44
    赞同 展开评论 打赏
  • 云端行者觅知音, 技术前沿我独行。 前言探索无边界, 阿里风光引我情。

    在阿里云MaxCompute中,可以通过设置参数来忽略脏数据。具体来说,可以在创建表时使用set odps.sql.submit.mode=nonstrict;命令来设置非严格式,这样在计算时会忽略掉脏数据,不会导致计算错误。

    需要注意的是,忽略脏数据可能会导致计结果的不准确性,因此在实际应用中需要根据具体情况来决定是否使用该功能。如果数据质量较差,建议先进行数据清洗和预处理,以提高计算结果的准确性。

    2023-05-18 14:54:47
    赞同 展开评论 打赏
  • 在MaxCompute中,可以通过设置任务属性来控制处理脏数据时的行为。具体来说,可以使用以下两种方式来处理脏数据:

    1.忽略脏数据:可以在任务属性中设置"odps.mapred.map.tasks.speculative.execution"为false来禁用重试功能,从而忽略处理失败的记录。这种方式不会重新执行失败的记录,而是直接跳过它们,因此无法确保数据的完整性和准确性。

    2.筛选脏数据:可以在处理数据之前对数据进行筛选,将不符合要求的记录过滤掉。这种方式可以确保数据的完整性和准确性,但需要手动编写过滤逻辑,且可能会牺牲一部分数据。

    需要注意的是,选择忽略脏数据还是筛选脏数据,应根据具体情况进行权衡和选择。

    2023-05-18 11:39:14
    赞同 展开评论 打赏
  • 在MaxCompute中,数据质量非常重要,因此默认情况下计算时会对脏数据进行检查和过滤,避免脏数据对计算结果的影响。如果您想要忽略脏数据,则可以通过设置参数来实现。具体方法如下: 1. 在MaxCompute SQL中使用set命令设置参数:set odps.sql.dirty.data.allowed=true;

    1. 在执行计算作业时,加上参数:-D odps.sql.dirty.data.allowed=true

    设置参数后,计算作业会忽略脏数据并继续执行。但是,请注意,忽略脏数据可能会导致计算结果的不准确,因此需要在实际情况下进行谨慎使用,避免对业务结果造成不良影响。

    另外,需要注意的是,MaxCompute中的脏数据包括不符合数据类型定义的数据、空值、超出有效范围的数据等。在实际使用中,我们应该尽量避免产生脏数据,保证数据的准确性和可靠性。

    2023-05-17 23:39:14
    赞同 展开评论 打赏
  • 资深技术专家,全网粉丝10W+。主攻技术开发,擅长分享、写文、测评。

    在MaxCompute中,对于计算作业,默认情况下是不会忽略脏数据的。当计算作业遇到脏数据时,会抛出异常并中断作业的执行。

    脏数据是指不符合表定义和数据格式要求的数据,例如类型不匹配、缺失字段或数据超出范围等。MaxCompute要求输入数据与表的定义严格匹配,以保证计算的准确性和一致性。

    2023-05-17 15:15:44
    赞同 展开评论 打赏
  • 在MaxCompute中可以设置忽略脏数据来防止因部分数据异常而导致整个作业失败。具体操作如下:

    在执行SQL语句时,可以在末尾添加SET odps.sql.mapper.cleanup.mode=skip;语句。该语句指定了Map任务出现脏数据时的处理方式为跳过,即忽略脏数据。

    如果需要全局设置跳过脏数据,则可以在ODPS Console或DataWorks控制台中修改项目级别的参数。具体步骤如下:

    a. 进入ODPS Console或DataWorks控制台,选择要修改的项目。

    b. 选择“运行参数” -> “新增全局参数”。

    c. 在弹窗中填写参数名称为odps.sql.mapper.cleanup.mode,参数值为skip,并保存设置。

    需要注意的是,忽略脏数据虽然可以避免整个作业因某些数据异常而失败,但也可能会对计算结果造成影响。建议在使用忽略脏数据时,仔细检查数据质量,并对计算结果进行验证和校验。同时,也需要注意不要滥用该功能,以免带来其他问题。

    2023-05-16 15:24:18
    赞同 展开评论 打赏
  • MaxCompute中,可以通过设置set odps.sql.submit.odps.sql.udf.strict.mode=false;来禁用SQL严格模式。具体而言,在SQL脚本执行之前或者之后加上这一句设置,可使MaxCompute忽略掉非法输入或异常记录,并且不会跳过整个作业。

    2023-05-16 14:56:42
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    在MaxCompute中,可以通过设置作业参数来忽略脏数据。具体来说,可以在SQL语句中使用"set odps.sql.type.system.odps2=false"语句来关闭ODPS2.0类型系统,从而允许脏数据的存在。例如:

    set odps.sql.type.system.odps2=false; SELECT * FROM your_table; 需要注意的是,忽略脏数据会对计算结果产生影响,因此在使用时需要谨慎。如果数据中存在脏数据,建议先进行数据清洗,保证数据的质量。

    2023-05-16 14:56:41
    赞同 展开评论 打赏
  • 在MaxCompute中,计算时出现脏数据是会报错的,目前没有设置忽略脏数据的选项。

    如果需要处理脏数据,可以使用MaxCompute提供的数据清洗工具,如ODPS SQL中的filter函数、map/reduce等函数对数据进行清洗。

    同时,可以通过MaxCompute的日志定位脏数据所在的行号,进行数据修正和清洗。如果数据量较大,可以使用MapReduce等分布式计算框架,进行大规模的数据清洗和修正。

    以下是使用ODPS SQL中的filter函数进行数据清洗的示例代码:

    -- 过滤掉age字段为负数的数据
    select * from my_table where age >= 0;
    

    通过该语句,可以过滤掉my_table表中age字段为负数的数据。

    2023-05-16 14:38:52
    赞同 1 展开评论 打赏
  • 月移花影,暗香浮动

    在MaxCompute计算时,可以通过设置set odps.sql.type.system.odps2=false;来允许脏数据进行计算,但这样可能会导致计算结果不准确,因此需要在业务场景中谨慎评估是否需要忽略脏数据。值得注意的是,如果对于某个表/分区启用了ODPS2.0功能,那么该表/分区默认不能容忍脏数据。

    2023-05-16 11:21:58
    赞同 展开评论 打赏
  • MaxCompute在计算时不会忽略脏数据,而是会直接报错。脏数据可能导致计算结果出现异常或不准确,因此在计算时应尽量避免脏数据的存在。

    如果需要忽略脏数据并正常计算,可以在MaxCompute中使用IF语句进行脏数据的处理。例如,可以使用IF函数将脏数据替换为默认值或空值,并进行计算,例如:

    SELECT IF(age >= 0 AND age <= 120, age, NULL) AS clean_age, COUNT(*) AS cnt FROM my_table GROUP BY clean_age;

    以上例子中,如果age值不在0到120的范围内,就会被IF语句替换为空值(NULL),从而避免脏数据的影响。使用IF函数可以在一定程度上减少脏数据对计算的影响,但仍然需要注意数据的质量,尽量减少脏数据的存在。

    2023-05-16 11:08:26
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在MaxCompute中,可以通过设置作业属性来忽略脏数据错误。具体步骤如下:

    • 打开ODPS SQL客户端(odpscmd),连接到MaxCompute项目。
    • 在SQL客户端中执行以下命令,设置作业属性:
    set odps.sql.type.system.odps2=false;
    set mapred.reduce.task.limit=0;
    set odps.sql.allow.fullscan=true;
    
    ```  -
    - 在SQL客户端中执行需要计算的SQL语句,例如:
    
    ```js
    select * from my_table where ds = '20220101';
    
    

    需要注意的是,如果发现了脏数据错误,应该尽快修复数据问题,而不是仅仅通过设置作业属性来绕过错误。

    2023-05-15 22:33:53
    赞同 展开评论 打赏
  • 技术架构师 阿里云开发者社区技术专家博主 CSDN签约专栏技术博主 掘金签约技术博主 云安全联盟专家 众多开源代码库Commiter

    在MaxCompute中,如果计算过程中出现了脏数据,会导致计算失败。因此,为了确保计算的准确性和可靠性,通常情况下不建议忽略脏数据。

    如果您一定要忽略脏数据并继续计算,可以尝试在SQL语句中使用IGNORE ERROR子句来处理。这个子句用于在计算时忽略特定类型的错误,从而允许计算继续进行。

    例如,以下SQL语句计算两个表的笛卡尔积,并使用IGNORE ERROR子句忽略掉因为数据异常产生的错误:

    SET odps.sql.type.system.odps2=true;
    
    INSERT OVERWRITE TABLE result_table SELECT t1.*, t2.*
    FROM table1 t1 JOIN table2 t2 ON t1.key = t2.key
    IGNORE ERROR WHEN KeyNotFoundException 
    WHERE t1.value > 0 AND t2.value < 10;
    

    在上述代码中,我们使用JOIN连接两个表,并设置了一个WHERE子句来过滤掉不符合条件的数据。同时,我们还在INSERT语句开头添加了一个IGNORE ERROR子句,用于忽略KeyNotFoundException类型的异常。

    需要注意的是,在实际使用中,忽略脏数据可能会影响计算结果的准确性和可靠性。因此,建议您在使用IGNORE ERROR子句时谨慎考虑,并仔细检查计算结果。

    2023-05-15 17:33:58
    赞同 展开评论 打赏
  • 热爱开发

    可以在MaxCompute中使用set odps.sql.submit.mode=ignore来忽略脏数据。这个设置将使MaxCompute在计算的时候忽略掉无法处理或不符合要求的数据,而不会导致整个计算作业失败。

    2023-05-15 17:30:37
    赞同 展开评论 打赏
  • MaxCompute 在计算的时候,可以通过设置脏数据处理方式来处理数据中包含的脏数据(比如值不合法、格式不正确等),常见的处理方式包括直接报错、忽略脏数据、使用默认值等。如果需要忽略脏数据,可以使用 MaxCompute 提供的 IGNORE 错误选项。

    在 MaxCompute SQL 中,当使用 IGNORE 错误选项时,计算引擎会忽略数据中存在的脏数据(比如空值、无效数字等),并在计算完成后生成一个脏数据报告。具体做法是在 SQL 语句中添加 SET odps.sql.submit.mode = 'ignore'; 语句。示例如下:

    SET odps.sql.submit.mode = 'ignore';
    INSERT INTO mytable (col1, col2, col3) VALUES ('value1', 'value2', 'NAN');
    

    在以上示例中,当执行 INSERT 语句时,如果 col3 列的值为无效数字(NAN、INF 或 -INF),则会被忽略,不会影响数据的插入。同时,MaxCompute 会在计算完成后生成脏数据报告,列出所有被忽略的脏数据。在大规模数据处理时,忽略脏数据可以提高计算效率,但在需求严格的场景下,建议根据实际情况选择其他处理方式。

    2023-05-15 16:46:27
    赞同 展开评论 打赏
滑动查看更多

MaxCompute(原ODPS)是一项面向分析的大数据计算服务,它以Serverless架构提供快速、全托管的在线数据仓库服务,消除传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,使您经济并高效的分析处理海量数据。

相关产品

  • 云原生大数据计算服务 MaxCompute
  • 相关电子书

    更多
    Data+AI时代大数据平台应该如何建设 立即下载
    大数据AI一体化的解读 立即下载
    极氪大数据 Serverless 应用实践 立即下载