以下为您介绍脏数据定义、常见产生原因与影响,及相关具体报错场景示例。
脏数据认定标准
脏数据是对业务没有意义,格式非法或者同步过程中出现问题的数据。单条数据写入目标数据源过程中发生了异常,则此条数据为脏数据。 因此只要是写入失败的数据均被归类于脏数据。
脏数据产生常见原因
每个数据库存在自己的特性,以下仅从常见场景进行说明。
字段类型不匹配导致写入报错脏数据。 例如:源端是VARCHAR类型的数据写到INT类型的目标列中导致脏数据报错。
脚本模式两端字段个数不一致导致脏数据产品,例如:源端column配置了3个字段,目标端配置4个字段。
脚本模式column配置格式不对,例如:时间格式配置不符合预期,导致写入目标端失败。
数据库编码格式不一致导致同步乱码。该场景可参见:如何处理编码格式设置/乱码问题导致的脏数据报错?
脏数据产生影响
脏数据不会同步至目标端。
脏数据产生后,不会同步至目标端, 您可以在同步任务配置时, 通过错误记录数控制(脏数据控制) 控制同步过程中是否允许脏数据产生,并且支持控制脏数据条数,即当脏数据超过指定条数时,任务失败退出。
大量脏数据产生将影响同步速度。
常见问题
DataWorks数据集成Elasticsearch 时间格式导致报错脏数据
问题描述:ERROR StdoutPluginCollector - 脏数据: {"exception":"Invalid format: \"2022-06-17 13:23:54\" is malformed at \" 13:23:54\"","record":
报错原因: 未告知同步应如何解析该时间格式的数据。待同步字段存在date类型,且该字段mapping没有format配置时,需要配置dateFormat参数。配置形式如下: "dateFormat" : "yyyy-MM-dd||yyyy-MM-dd HH:mm:ss",该配置需要包含同步date类型字段的所有格式。关于es该参数配置,详情请参见:Elasticsearch Reader
MaxCompute数据同步至Redis由于字段个数不匹配导致报错脏数据
问题现象:source column number is in valid
报错原因:源头多配置了column。当value类型为hash时,数据源的每行记录都需遵循相应的规范。即每行记录除key外,只能有1对attribute和value,并且attribute必须在value前面,Redis Writer方可解析出column对应的是attribute或value。 按照用户意图,应该是column只保留3列,移除不需要的列。详情请参见:Redis Writer。