脏数据策略是指什么?
脏数据如何排查和定位?脏数据定义:单条数据写入目标数据源过程中发生了异常,则此条数据为脏数据。 因此只要是写入失败的数据均被归类于脏数据。
脏数据影响:脏数据将不会成功写入目的端。您可以控制是否允许脏数据产生,并且支持控制脏数据条数,数据集成默认允许脏数据产生,您可以在同步任务配置时指定脏数据产生条数。详情可参考:通过向导模式配置离线同步任务。
任务设置允许脏数据:当脏数据产生时,任务继续执行,但脏数据将会被舍弃,不写入目的端。
任务控制允许产生的脏数据条数:
设置脏数据允许条数为0条,则当脏数据产生时,任务将失败退出。
设置脏数据允许条数为x条,则当脏数据产生条数超过x条时,任务将失败退出,当脏数据产生条数小于x条时,任务将继续运行,但脏数据将会被舍弃,不写入目的端。
脏数据实时场景分析:
场景一:
报错现象:{'message':'写入 ODPS 目的表时遇到了脏数据: 第[3]个字段的数据出现错误,请检查该数据并作出修改或者您可以增大阈值,忽略这条记录.','record':[{'byteSize':0,'index':0,'type':'DATE'},{'byteSize':0,'index':1,'type':'DATE'},{'byteSize':1,'index':2,'rawData':0,'type':'LONG'},{'byteSize':0,'index':3,'type':'STRING'},{'byteSize':1,'index':4,'rawData':0,'type':'LONG'},{'byteSize':0,'index':5,'type':'STRING'},{'byteSize':0,'index':6,'type':'STRING'}。
如何处理:该日志中可以看出脏数据的字段,第三个字段异常。
脏数据是writer端报的,要检查下writer端的建表语句。odps端该表字段指定的字段大小小于MySQL端该字段数据大小 。
数据同步原则:来源端数据源的数据要能写入目的端数据源(来源端和目的端类型需要匹配,字段定义的大小需要匹配),即源端数据类型需要与写端数据类型匹配,源端是VARCHAR类型的数据不可写到INT类型的目标列中;目标端的数据类型定义的大小需要可以接收源端映射字段实际数据大小,源端是long、varchar 、double等类型的数据,目的端均可用string、text等大范围类型接纳。
脏数据报错不清晰时,需要复制出打印出的脏数据的一整条,观察其中的数据,和目的端数据类型比较,看哪一条或哪一些不合规范。
比如:
{'byteSize':28,'index':25,'rawData':'ohOM71vdGKqXOqtmtriUs5QqJsf4','type':'STRING'}byteSize:字节数;index:25,第26个字段;rawData:具体值(即value);type:数据类型。
场景二:
报错现象:DataX读取MySQL中有空值时报脏数据。
如何处理:请检查源端存在空值的字段将写入目标端什么类型的字段中,如果类型不一致将会报错。例如,string类型的null写入目标端int类型字段时会报错。
如何查看脏数据?你可以进入日志详情页,单击日志中Detail log url获取具体查看离线同步日志以及脏数据信息。参考文档https://help.aliyun.com/zh/dataworks/support/batch-synchronization?spm=a2c6h.12873639.article-detail.9.4b6230c6TW3Gol#section-9ca-2fv-zxw
赞0
踩0