离线同步数据质量问题包括同步过程数据量一致性和数据一致性,本文从这两个维度为您说明各因素可能导致的质量问题。
背景信息
- 确认数据量一致性时,数据库读取错误。
- 同步任务配置导致数据重复或数据缺失。
- 同步任务冲突导致数据重复或数据缺失。
数据量一致性
当同步数据量不符合预期时,您可根据以下步骤确认数据量的一致性。
步骤一:确认数据写入的库
数据集成支持数据源开发和生产环境隔离,即同一个任务配置的开发数据源与生产数据源可以不一致,同时,开发环境和生产环境写入的数据库、数据表也可以不一样。因此,在基于当前文档确认同步结果表前,请先确认您查询的库与数据同步任务写入的库是否为同一个库。- 确认方式:关系型数据库支持您在Detail log中搜索关键字jdbcUrl、table。详情请参见:查看离线同步日志。
- 场景示例:
标准模式工作空间下,数据同步至工作空间内的odps_first数据源(工作空间绑定MaxCompute引擎时自动创建的数据源)时,开发环境执行同步任务(DataStudio界面或在开发环境运维中心),数据将写入开发数据源,生产环境执行数据将写入生产数据源。
开发环境的MaxCompute项目名一般为projectname_dev,生产环境的MaxCompute项目名一般为projectname。所以在查询数据时,若您需要在数据开发界面查询生产表,您需要指定表所在项目,即查询projectname.tablename。
步骤二:确认同步读取的数据量
确认操作 | 说明 |
---|---|
确认读到的数据量 | 在离线同步任务日志末尾,通过读出记录总数确认离线同步任务从源端数据库读到的数据量。![]() |
确认取数SQL | 在同步日志Detail log中会打印根据您的任务配置生成的取数SQL,若任务被切分为多个task,日志将打印多个取数SQL。![]() |
同步结果对比 |
|
步骤三:确认同步写入的数据量
您可以在目标端数据库确认同步最终写入的数据量,一般存在两种情况:数据重复或数据缺失,以下为您说明不同业务场景下,造成该问题的可能原因。
场景 | 现象 | 可能原因 | 解决方案 |
---|---|---|---|
任务配置 | 数据重复 | 当任务配置为同步前保留原有数据(insert into),任务重复执行导致数据重复。 |
|
数据缺失 | 同步过程产生脏数据。若任务配置容忍脏数据,那么脏数据产生后该数据将会舍弃,但任务不会失败退出。 | 建议确认脏数据产生原因并处理脏数据,若您任务不允许产生脏数据,您可以在任务配置界面的通道配置处,修改该阈值。
|
|
任务冲突 | 数据重复或缺失 | 不可并行的任务同时执行。即同一业务场景下,需要顺序执行的任务却同时执行。 |
|
数据缺失 | 多个任务操作同一个表。即不同业务场景下,任务冲突导致其他节点同时操作该表数据。 | 与对应节点责任人协调沟通。
说明 如何找到冲突的任务和任务责任人,详情请参见:附:确认是否存在冲突任务和确认任务责任人。
|
数据一致性
如果无上述问题,但同步前后数据仍存在问题,您需要检查任务的配置情况。
现象 | 可能原因 |
---|---|
数据库存在时间类型字段数据 | 源端与目标端数据库时区不一致。 |
半结构化数据同步部分字段为空 | 列解析错位导致两列数据合并为了一列。
建议:确认数据中是否存在列分隔符,可先处理源端数据后再执行同步任务。 |
附:确认是否存在冲突任务和确认任务责任人
附:多任务操作同一个分区,导致数据重复
以MaxCompute为例,离线同步任务与ODPS SQL任务为小时调度任务,并且操作同一个天级别分区,离线同步任务写入模式为写入前保留已有数据。若某天任务执行延迟导致ODPS
SQL任务和其他周期实例的同步任务(操作表A分区T)运行出现交替执行时,将可能导致表A天级别分区T分区数据量翻倍或为空。

说明 建议您将该表配置为二级分区表,每个小时实例数据操作对应的小时分区。