最新历史版本 :定时任务脏数据处理说明 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

定时任务运行时若遇到脏数据,任务会报错并终止。本文说明如何查看脏数据产生的原因及如何处理脏数据。

注:实时管道任务的脏数据说明请参见:实时管道任务处理脏数据

2. 脏数据产生常见原因编辑

原因
说明
主键冲突当写入方式-主键冲突策略为「主键相同,记录为脏数据」时,主键冲突的数据将被视为脏数据
字段长度超出限制

需注意,字段长度还与编码有关

PostgreSQL 数据库的 varchar(60) 和 SQLServer 的 varchar(60) 长度定义是不一样的,SQLServer表示最多存储 60 字节,PostgreSQL 是标识,最多存储 60 个字符

根据编码的不同,字符占的字节也不一致,60 个字符计算后肯呢个超过 60 个字节

字段类型不匹配-
目标字段缺失
字段映射中的目标表字段被删除,所以来源表的该字段无法同步,变为脏数据
违反目标字段非空约束来源表某个字段值为空,插入到不能为空的目标表字段中
目标表的表空间不足-
暂时性原因网络不稳定,重新运行定时任务即可

3. 查看脏数据条数及原因编辑

1)定时任务运行时,若存在脏数据,日志中将会报错。如下图所示:

注:建议将 日志等级 设置为 INFO,日志信息会更加详细。

30.png

「统计」Tab页下,可看到脏数据具体条数,点击条数,可看到错误类型和错误原因。如下图所示:

31.png

2)用户若想查看到所有脏数据的所有信息,可到%FDL_HOME%\logs\fanruan.log文件中进行查看。

3)用户若想遇到脏数据就通知给指定用户,可在结果通知中勾选「脏数据通知」按钮。如下图所示:

详情请参见:任务控制-结果通知

34.png

4. 处理脏数据编辑

4.1 忽略脏数据

若用户希望任务具有一定容错性,即遇到脏数据任务继续运行,不进行报错,运行状态为成功且脏数据不写入到目标表中(正常的数据会顺利写入到目标表中,可设置脏数据阈值(输入范围为1~1万)。如下图所示:

详情请参见:任务控制-容错机制

注:若不配置「脏数据容忍」,只要遇到脏数据就会导致任务失败。

1758105726544253.png

若脏数据条数未超过阈值(最大可设置为10000),日志信息如下:

1758106424672418.png

脏数据条数超出脏数据阈值后,任务会报错。

4.2 脏数据处理后写入到目标表

用户若希望脏数据写入到目标表,需要根据日志排查脏数据出现原因,修正后重新运行任务或者 重试任务

产生脏数据后,重试任务的处理场景:

场景
增量同步的方式
重试后是否会存在数据问题
建议处理措施
全量同步
--
增量同步-使用时间戳


动态参数:如:配置 now-1 作为数据范围,每次更新前一天数据


在重试时,用户可以指定本次运行的临时任务参数值

且用户的任务设计需要支持幂等,即同一数据范围的定时任务需要支持多次运行

获取目标表的最新数据时间戳

如:每次任务先从目标表获取最大的时间戳,作为本次同步的起始时间

用户需要手动删除目标表大于本批次的数据,以进行重试

且用户的任务设计需要支持幂等,即同一数据范围的定时任务需要支持多次运行

自定义配置表存储断点

如:每次任务最后一步存储本次同步的最大时间至一张表存储

用户需要手工修改断点值,以进行重试

且用户的任务设计需要支持幂等、即同一数据范围的定时任务需要支持多次运行

全表比对--