一致性校验查什么
一致性校验确认同一件事实在不同表、不同系统或不同层级之间对得上:订单主表金额与明细汇总一致,数仓与源库账单一致,同一指标在 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 而没有规则说明,人员更替后没人知道差异多大算不合格。