数据工程 · 阅读约 6 分钟

迁移与 CDC 后如何核对数据

根据风险与复杂度选择数据核对方法,逐步验证迁移和 CDC 数据,并说明检查覆盖范围、异常及验收结果。

先从简单检查开始,在错误影响大的地方深入验证

先按表检查行数,再比较分区覆盖与各分区行数。增加列汇总、最小/最大值、空值及维度去重统计以查找具体缺陷。记录级正确性重要时,使用键、哈希与字段比对。每种方法都有盲点,应组合使用,而不是把一个数字相同当作证明。

对于可重建的暂存数据,在接受剩余风险的前提下,数量与数据剖析可能已足够。关键迁移切换则应增加完整键值比对及业务规则验收。持续 CDC 应频繁检查变更范围,并定期做更广泛的漂移扫描。抽样只能证明样本中检查过的内容。

先定义可比边界

  1. 明确比较约定: 表、筛选条件、键、排除项、预期转换、比较列、容差及负责人。对于经过转换的目标,应按目标粒度推导预期输出,而非要求原始数据完全相等。
  2. 对齐数据状态: 切换时暂停写入,记录源提交位置,让 CDC 处理到该位置,并保留两端比较视图。也可采用协调快照或可重建的历史状态。
  3. 记录证据: 快照标识、日志位置或各分区偏移、提取时间、映射版本及查询版本。仅有时钟时间戳不能证明事务状态一致。

比较方法:复杂度与优缺点

这里的复杂度指实施所需的工作量,并不代表运行速度。即使只是精确统计行数,也可能需要扫描整张大表。分组和去重可能涉及排序或数据重分布,哈希计算会增加 CPU 开销,全量比对则需要更多关联查询和数据传输。平台支持时,可在一次扫描中完成多项兼容的数据剖析检查。

方法/投入优点缺点/盲点
表行数 · 低简单的完整性信号缺失与多余行可能相互抵消
分区清单 · 低发现缺失期间或范围分区存在不代表内容正确
每分区行数 · 低至中定位数量差异值错误时行数仍可能相同
列求和 · 低至中适合金额与数量控制正负错误相互抵消或数值位置互换时,仍可能通过检查
最小/最大值与空值 · 低发现边界与缺失值变化不检查极值之间的内容
去重后的值及出现频率 · 中发现类别丢失与分布变化无法证明值分配到了正确的行
原生校验和 · 中简洁的变化信号存在碰撞及引擎特定语义
行/分区哈希 · 中至高以精简输出比较多列需处理规范化、扫描成本及碰撞风险
键集合比对 · 中至高识别缺失及非预期记录不验证非键字段的值
完整字段比对 · 高定位每个已比较值的差异需要更多计算、传输及异常输出

各方法如何执行、何时使用

  1. 表行数: 执行 COUNT(*) ,统计两端各表的行数,并报告源端行数、目标端行数和差值。每次加载都应执行此检查。系统目录中的估算行数不能用于验收;行数相同也不代表记录相同。
  2. 分区数量与清单: 比较预期分区的数量 及标识 。两边同为十二个月,仍可能缺一个月并多出另一个月。从元数据或预期清单纳入空分区。物理分区方式不同时,比较逻辑日期或键范围。
  3. 分区行数: 按相同月份、租户或键范围分组,以全外连接比较数量,让缺失组保持可见。适合分区加载与回填;报告每个失败分区,而不只是总数。
  4. 数值列求和: 比较 SUM(amount) ,或对数量字段求和,并按期间、实体和币种分别比较。此方法适用于数值型业务指标。应约定小数精度、舍入方式和容差,不要混合汇总不同币种。+100 与 −100 的错误会相互抵消。
  5. 最小/最大值与空值剖析: 比较 MIN, MAXCOUNT(*) - COUNT(column) 的结果,检查日期及重要字段,找出日期范围不完整或字段值丢失的问题。应区分空分组和汇总结果为零的分组;许多聚合函数会忽略空值。
  6. 维度值去重比对: 比较 COUNT(DISTINCT status),再双向比较实际状态集合与各状态行数。适用于代码、国家及产品维度。集合 {A,B} 与 {A,C} 数量相同;频率一致也不能发现类别被分配给错误记录。空值需单独检查。
  7. 校验和: 按有文档说明的方法,对选定列计算校验和,再按键比较,或按约定算法汇总至分区。在兼容引擎中可作为可选的初筛检查。
  8. 哈希比对: 一致地编码各列,使用相同算法(如 SHA-256)对每行计算哈希,再按键比较。分区摘要应包含键、顺序及重复次数。适合宽表;对失败分区下钻至行与字段。哈希一致是概率性证据,并非绝对证明。
  9. 键集合比对: 对源端与目标端执行双向反连接,分别报告缺失、多余、空值及重复键。数量不一致或记录完整性重要时使用;重复键可能在总数中掩盖缺失键。
  10. 完整字段比对: 按已验证的唯一键关联记录,逐一比较映射字段,并明确处理两端均为空值的情况。没有唯一键时,使用保留重复次数的多重集合比较。此方法适用于关键字段或无法解释的哈希差异;应记录键、列、预期值和实际值。

哈希与直接比较都需约定类型、列顺序、空值与空字符串、时区、小数表示及无歧义字段边界。保留有意义的大小写与空白,按目标粒度比较转换后的预期值。分块扫描、限制并发,并将排除列记录为覆盖缺口。

交付能够支持决策的报告

  • 验收摘要: 运行 ID、范围、边界、所需深度、已检查/应检查行列、排除对象、失败、待检查项及上线/不上线决策。
  • 技术证据: 方法、表/分区、列、源结果、目标结果、差值、容差及状态;保留源/目标标识、规则/查询版本、耗时及证据位置。
  • 业务验收: 规则结果、报表核对、容差及负责人批准。
  • CDC 运营: 数据时效、积压、重放/删除结果、漂移趋势及未解决异常的时长。
  • 整改登记: 严重程度、受影响键、根因、负责人、纠正措施、重跑 ID 及关闭证据。限制原始敏感值,使用脱敏示例及受控下钻。

状态示例:100 个必检分区中,98 个通过、1 个失败、1 个待检查,即使大多数已检查行一致,验收仍不完整。定义差异率的分母,绝不能将未测试数据算作通过。

存在未解释的关键差异或必需覆盖不完整时,应阻止切换。任何被接受的例外都需有负责人及期限。纠正根因,修复或重放受影响范围,再重新执行核对及下游检查后关闭。修复需与运行中的 CDC 写入方协调,避免覆盖更新的数据。

更全面的规划可参阅 迁移准备指南生产 CDC 检查清单.

一手参考资料