ETL

ETL方法论:数据对账

1. 数据对账

1.1. 概念

数据一致性:数据对账要解决的,是数据同步任务执行一段时间后、源表和目标表数据不一致的问题。

项目经验:

1、来源表的历史数据,必须保留以防止出现问题;

2、来源表必须有主键字段,确保一条数据的唯一性。比如:账单信息表的账单 ID、用户信息表的用户 ID。

1.2. 增量同步

上表新增用户小华、同时李四昵称发生变更。

  • 插入更新:

  • 拉链维护:

1.3. 全量同步

  • 不需要考虑数据对账问题;
  • 全量同步,只会在第一次【初始化】、以及同步【对账表】的时候才会应用到。

2. 数据不一致的原因

2.1. 来源表物理删除

  • 异常结果:来源表数据量比目标表少。

  • 解决办法:【逻辑删除】维护数据状态标识,进行逻辑删除。比如:数据状态:值为 1 表示可用,值为 0 表示不可用。

2.2. 历史数据更新未同步更新增量字段

  • 异常结果:相同主键数据内容不一致。
    • 比如:数据有变动,却未修改更新时间,导致增量同步时、无法感知数据变化,出现相同主键数据内容不一致。
  • 解决办法:【增量字段】随数据变化及时更新。

2.3. 增量字段不规范

  • 异常结果:相同主键数据内容不一致。
    • 比如:数据有变动,但更新时间未能正常修改,导致增量同步时、无法感知数据变化,出现相同主键数据内容不一致。
  • 解决办法:【增量字段】需要符合规范。

2.5. 增量字段不合理

  • 异常结果:来源表数据比目标表多,相同主键数据内容不一致。
    • 比如:增量字段设置为用户注册时间,但注册后需要时间审核,而审核时间不可控,数据同步记录的偏移量是最近时间,但是在审核这段时间可能还会有新的账号注册,这就会导致数据不一致问题。
  • 解决办法:选择正确的增量字段。

2.6. 任务异常

  • 异常结果:来源表数据比目标表多,相同主键数据内容不一致。
    • 比如:某一天任务运行失败,导致数据未能同步,之后又未能及时补录,导致数据不一致。
  • 解决办法:异常重试机制、任务监控、及时补录数据。

3. 数据对账策略

3.1. 目标表公共字段

  • 入库时间
    • 记录创建时间;
  • 更新时间
    • 作为【增量字段】,用于判断那些数据近期有更新;
  • 业务数据 MD5 值
    • 用于判断该条数据全部字段值、是否有变动。

3.2. 对账表

  • 对账表内容:
    • 业务表主键字段,一般为 ID;
    • 业务表增量字段,一般为 最后更新时间;
    • 业务表记录全字段 MD5 值;
  • 全量同步对账表
    • 对账表需要采用全量同步,才能保证对账的准确性。

      注意:对账表字段少,数据量小,同步的速度快,资源占用小,所以可以进行全量同步。

  • 对账表作用
    • 通过将目标表和对账表进行联合分析,对标差异,进而排查数据差异。

3.3. 数据同步初始化

  • 数据同步初始化,也就是第一次同步时、需要全量同步所有历史数据;

首次全量同步,记录数据偏移量(上次同步位置,即最新的同步位置)。

注意:信息入库时间和信息更新时间,实际上是不一致的,最好全部记录下来。

3.4. 对账分析内容

  • 数据量一致性:
    • 目标表是否存在数据缺失;
  • 数据内容一致性:
    • 目标表数据未及时更新;

3.5. 对账周期

  • 根据业务实际,决定多久进行一次对账表的全量同步;
  • 不同量级、不同类型的数据,可以按不同周期进行对账;

3.6. 注意事项

  • 当数据量达到百亿、千亿级别时,全量同步对账表会非常考验系统性能;
  • 需要根据业务实际,分析是否有必要针对全部历史数据、全量同步对账表;
  • 实际工作中,需要根据业务实际,进行分级、分类处理。