1. 概述
定时任务运行时若遇到脏数据,任务会报错并终止。本文说明如何查看脏数据产生的原因及如何处理脏数据。
注:实时管道任务的脏数据说明请参见:实时管道任务处理脏数据
2. 脏数据定义
1)与目标字段配置不匹配而无法写入的数据(目标字段长度/类型不匹配、目标字段缺失、违反目标字段非空约束等)。
2)当写入方式-主键冲突策略为「主键相同,记录为脏数据」时,主键冲突的数据将被视为脏数据。
3. 查看脏数据条数及原因
1)定时任务运行时,若存在脏数据,日志中将会报错。如下图所示:
注:建议将 日志等级 设置为 INFO,日志信息会更加详细。
「统计」Tab页下,可看到脏数据具体条数,点击条数,可看到错误类型和错误原因。如下图所示:
2)用户若想查看到所有脏数据的信息,可到%FDL_HOME%\logs\fanruan.log文件中进行查看。
3)用户若想遇到脏数据就通知给指定用户,可在结果通知中勾选「脏数据通知」按钮。如下图所示:
详情请参见:任务控制-结果通知
4. 处理脏数据
4.1 忽略脏数据
若用户希望任务具有一定容错性,即遇到脏数据任务继续运行,不进行报错,运行状态为成功,且脏数据不写入到目标表中(正常的数据会顺利写入到目标表中),可设置脏数据阈值。如下图所示:
详情请参见:任务控制-容错机制
注:若不配置「脏数据容忍」,只要遇到脏数据就会导致任务失败。
若脏数据条数未超过阈值(最大可设置为10000),日志信息如下:
脏数据条数超出脏数据阈值后,任务会报错。
4.2 脏数据处理后写入到目标表
用户若希望脏数据写入到目标表,需要根据日志排查脏数据出现原因,修正后重新运行任务或者 重试任务
产生脏数据后,重试任务的处理场景:
场景 | 增量同步的方式 | 重试后是否会存在数据问题 | 建议处理措施 |
---|---|---|---|
全量同步 | - | 否 | - |
增量同步-使用时间戳 | 动态参数:如:配置 now-1 作为数据范围,每次更新前一天数据 | 是 | 在重试时,用户可以指定本次运行的临时任务参数值 且用户的任务设计需要支持幂等,即同一数据范围的定时任务需要支持多次运行 |
获取目标表的最新数据时间戳 如:每次任务先从目标表获取最大的时间戳,作为本次同步的起始时间 | 是 | 用户需要手动删除目标表大于本批次的数据,以进行重试 且用户的任务设计需要支持幂等,即同一数据范围的定时任务需要支持多次运行 | |
自定义配置表存储断点 如:每次任务最后一步存储本次同步的最大时间至一张表存储 | 是 | 用户需要手工修改断点值,以进行重试 且用户的任务设计需要支持幂等、即同一数据范围的定时任务需要支持多次运行 | |
全表比对 | - | 否 | - |