一致性校验

一致性校验确认同一事实在不同表、不同系统或不同层级之间口径一致:订单金额与明细汇总一致、数仓与源库账单一致、指标在 DWS 与 ADS 一致;差异要能解释。

一致性校验查什么

一致性校验确认同一件事实在不同表、不同系统或不同层级之间对得上:订单主表金额与明细汇总一致,数仓与源库账单一致,同一指标在 DWS 与 ADS 两个层级一致。差异本身不一定是错误,但必须能解释清楚——是过滤条件不同、时间窗不同,还是有一边真的算错了。无法解释的差异就是要修的问题。

基本信息

层级内DWD 明细与 DWS 汇总口径一致
跨表主表金额与明细金额合计一致
跨系统数仓与业务库或账单核对
处置原则差异要能定位到具体单据并解释原因

典型使用场景

  • 金额勾稽:主表与明细的金额合计核对
  • 跨系统对账:数仓与业务库、支付渠道账单核对
  • 层级一致性:同一指标在汇总层与报表层是否一致
  • 上下游衔接:上游分区与下游消费结果是否对应
  • 变更后复核:口径或过滤条件修改后重新核对一遍

主表与明细金额核对

主表与明细金额核对
SELECT o.order_id, o.pay_amount, SUM(d.item_amount) AS detail_sum
FROM dwd_trade_order_di o
JOIN dwd_trade_order_detail_di d ON o.order_id = d.order_id
WHERE o.dt = '2026-10-11' AND d.dt = '2026-10-11'
GROUP BY o.order_id, o.pay_amount
HAVING ABS(o.pay_amount - SUM(d.item_amount)) > 0.01   -- 容差按业务定义
LIMIT 50;

一致性维度

维度核对对象差异常见原因
层级内明细与汇总汇总 SQL 的过滤条件与明细定义不一致
跨表主表与明细部分退款、优惠分摊方式不同
跨系统数仓与业务库抽取时间差、软删除处理不同
时间窗同口径不同区间边界取值含头不含尾写法不一致
一致性检查的容差要按业务定义:金额类可以用 0.01 元容差,计数类通常要求完全相等,两类混用会让告警要么太吵要么太松。
跨表核对时忘记统一过滤条件(例如一边排除了测试单、另一边没排),差异全部变成噪声,看起来问题很大,其实只是口径没对齐。
一致性规则要写清「哪两边、哪个时间窗、什么容差」,并随链路一起版本化;只留一段核对 SQL 而没有规则说明,人员更替后没人知道差异多大算不合格。

易错点

  • 跨表核对时忘记统一过滤条件(一边含测试单),差异全是噪声
  • 用浮点数直接比较金额,出现本不存在的精度差异告警
  • 发现差异直接改一边的数字让两边相等,掩盖了真实的处理错误
  • 只在报表层做核对,问题已经流到最末端,回退成本最高

数据来源与参考

  • 行业数据质量一致性校验实践
  • DAMA-DMBOK 一致性维度
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌