数据工程 · 阅读约 6 分钟
迁移与 CDC 后如何核对数据
根据风险与复杂度选择数据核对方法,逐步验证迁移和 CDC 数据,并说明检查覆盖范围、异常及验收结果。
先从简单检查开始,在错误影响大的地方深入验证
先按表检查行数,再比较分区覆盖与各分区行数。增加列汇总、最小/最大值、空值及维度去重统计以查找具体缺陷。记录级正确性重要时,使用键、哈希与字段比对。每种方法都有盲点,应组合使用,而不是把一个数字相同当作证明。
对于可重建的暂存数据,在接受剩余风险的前提下,数量与数据剖析可能已足够。关键迁移切换则应增加完整键值比对及业务规则验收。持续 CDC 应频繁检查变更范围,并定期做更广泛的漂移扫描。抽样只能证明样本中检查过的内容。
先定义可比边界
- 明确比较约定: 表、筛选条件、键、排除项、预期转换、比较列、容差及负责人。对于经过转换的目标,应按目标粒度推导预期输出,而非要求原始数据完全相等。
- 对齐数据状态: 切换时暂停写入,记录源提交位置,让 CDC 处理到该位置,并保留两端比较视图。也可采用协调快照或可重建的历史状态。
- 记录证据: 快照标识、日志位置或各分区偏移、提取时间、映射版本及查询版本。仅有时钟时间戳不能证明事务状态一致。
比较方法:复杂度与优缺点
这里的复杂度指实施所需的工作量,并不代表运行速度。即使只是精确统计行数,也可能需要扫描整张大表。分组和去重可能涉及排序或数据重分布,哈希计算会增加 CPU 开销,全量比对则需要更多关联查询和数据传输。平台支持时,可在一次扫描中完成多项兼容的数据剖析检查。
| 方法/投入 | 优点 | 缺点/盲点 |
|---|---|---|
| 表行数 · 低 | 简单的完整性信号 | 缺失与多余行可能相互抵消 |
| 分区清单 · 低 | 发现缺失期间或范围 | 分区存在不代表内容正确 |
| 每分区行数 · 低至中 | 定位数量差异 | 值错误时行数仍可能相同 |
| 列求和 · 低至中 | 适合金额与数量控制 | 正负错误相互抵消或数值位置互换时,仍可能通过检查 |
| 最小/最大值与空值 · 低 | 发现边界与缺失值变化 | 不检查极值之间的内容 |
| 去重后的值及出现频率 · 中 | 发现类别丢失与分布变化 | 无法证明值分配到了正确的行 |
| 原生校验和 · 中 | 简洁的变化信号 | 存在碰撞及引擎特定语义 |
| 行/分区哈希 · 中至高 | 以精简输出比较多列 | 需处理规范化、扫描成本及碰撞风险 |
| 键集合比对 · 中至高 | 识别缺失及非预期记录 | 不验证非键字段的值 |
| 完整字段比对 · 高 | 定位每个已比较值的差异 | 需要更多计算、传输及异常输出 |
各方法如何执行、何时使用
- 表行数: 执行
COUNT(*),统计两端各表的行数,并报告源端行数、目标端行数和差值。每次加载都应执行此检查。系统目录中的估算行数不能用于验收;行数相同也不代表记录相同。 - 分区数量与清单: 比较预期分区的数量 及标识 。两边同为十二个月,仍可能缺一个月并多出另一个月。从元数据或预期清单纳入空分区。物理分区方式不同时,比较逻辑日期或键范围。
- 分区行数: 按相同月份、租户或键范围分组,以全外连接比较数量,让缺失组保持可见。适合分区加载与回填;报告每个失败分区,而不只是总数。
- 数值列求和: 比较
SUM(amount),或对数量字段求和,并按期间、实体和币种分别比较。此方法适用于数值型业务指标。应约定小数精度、舍入方式和容差,不要混合汇总不同币种。+100 与 −100 的错误会相互抵消。 - 最小/最大值与空值剖析: 比较
MIN,MAX与COUNT(*) - COUNT(column)的结果,检查日期及重要字段,找出日期范围不完整或字段值丢失的问题。应区分空分组和汇总结果为零的分组;许多聚合函数会忽略空值。 - 维度值去重比对: 比较
COUNT(DISTINCT status),再双向比较实际状态集合与各状态行数。适用于代码、国家及产品维度。集合 {A,B} 与 {A,C} 数量相同;频率一致也不能发现类别被分配给错误记录。空值需单独检查。 - 校验和: 按有文档说明的方法,对选定列计算校验和,再按键比较,或按约定算法汇总至分区。在兼容引擎中可作为可选的初筛检查。
- 哈希比对: 一致地编码各列,使用相同算法(如 SHA-256)对每行计算哈希,再按键比较。分区摘要应包含键、顺序及重复次数。适合宽表;对失败分区下钻至行与字段。哈希一致是概率性证据,并非绝对证明。
- 键集合比对: 对源端与目标端执行双向反连接,分别报告缺失、多余、空值及重复键。数量不一致或记录完整性重要时使用;重复键可能在总数中掩盖缺失键。
- 完整字段比对: 按已验证的唯一键关联记录,逐一比较映射字段,并明确处理两端均为空值的情况。没有唯一键时,使用保留重复次数的多重集合比较。此方法适用于关键字段或无法解释的哈希差异;应记录键、列、预期值和实际值。
哈希与直接比较都需约定类型、列顺序、空值与空字符串、时区、小数表示及无歧义字段边界。保留有意义的大小写与空白,按目标粒度比较转换后的预期值。分块扫描、限制并发,并将排除列记录为覆盖缺口。
交付能够支持决策的报告
- 验收摘要: 运行 ID、范围、边界、所需深度、已检查/应检查行列、排除对象、失败、待检查项及上线/不上线决策。
- 技术证据: 方法、表/分区、列、源结果、目标结果、差值、容差及状态;保留源/目标标识、规则/查询版本、耗时及证据位置。
- 业务验收: 规则结果、报表核对、容差及负责人批准。
- CDC 运营: 数据时效、积压、重放/删除结果、漂移趋势及未解决异常的时长。
- 整改登记: 严重程度、受影响键、根因、负责人、纠正措施、重跑 ID 及关闭证据。限制原始敏感值,使用脱敏示例及受控下钻。
状态示例:100 个必检分区中,98 个通过、1 个失败、1 个待检查,即使大多数已检查行一致,验收仍不完整。定义差异率的分母,绝不能将未测试数据算作通过。
存在未解释的关键差异或必需覆盖不完整时,应阻止切换。任何被接受的例外都需有负责人及期限。纠正根因,修复或重放受影响范围,再重新执行核对及下游检查后关闭。修复需与运行中的 CDC 写入方协调,避免覆盖更新的数据。
更全面的规划可参阅 迁移准备指南 与 生产 CDC 检查清单.