监控哪些信号
维度加载完成后、事实加载之前,用一组固定指标检查版本健康度:本批新增版本数、本批关闭版本数、无当前版本的自然键数、时间区间重叠对数、未知成员占比。前两类反映上游主数据的变更速率,中间两类是结构缺陷,必须在事实加载前阻断,最后一项衡量维表与源系统的同步质量。每个维度单独配阈值,因为客户维度每日变更几十行、报价类维度整表刷新,波动量级完全不同。
基本信息
| 新增版本数 | 本批新插入的版本行数 |
|---|---|
| 关闭版本数 | 生效区间被改写的版本行数 |
| 结构缺陷 | 无当前版本、区间重叠的计数 |
| 质量指标 | 未知成员占比、关键属性空值率 |
| 执行时点 | 维度加载后、事实加载前 |
典型使用场景
- 每日调度中作为维度加载的校验节点,不通过就阻断下游事实任务
- SCD 类型调整或上游接口变更后,观察新增版本数是否异常放大
- 大促前后对比版本变化速率,判断上游主数据维护是否失控
- 数据质量周报用趋势图呈现维度稳定性,区分偶发与持续恶化
- 出现「客户查不到」类问题时,先看无当前版本计数定位源头
结构缺陷检查
结构缺陷检查
-- 无当前版本:同一自然键的 is_current 合计不等于 1
SELECT count(1) AS bad_keys FROM (
SELECT customer_id FROM dim_customer
GROUP BY customer_id
HAVING sum(CASE WHEN is_current = 1 THEN 1 ELSE 0 END) <> 1
) t;
-- 区间重叠:相邻版本时间区间相交的对数
SELECT count(1) AS overlap_pairs
FROM dim_customer a
JOIN dim_customer b
ON a.customer_id = b.customer_id AND a.customer_sk < b.customer_sk
WHERE a.start_dt <= b.end_dt AND b.start_dt <= a.end_dt;指标读法
| 指标 | 计算口径 | 异常信号 |
|---|---|---|
| 新增版本数 | 本批写入的版本行数 | 突增数倍说明上游主数据被批量刷新 |
| 无当前版本 | is_current 合计不等于 1 的键数 | 大于 0 应阻断事实加载 |
| 区间重叠 | 时间区间相交的版本对数 | 大于 0 时点关联会取到多行 |
| 未知成员占比 | 关联到未知成员的事实占比 | 持续上升说明维表同步滞后 |
监控跑在维度加载之后、事实加载之前,问题在事实层落数据前被拦住,回滚与重跑的成本最低。
阈值要按维度定制:客户维度每日新增版本可能只有几十行,报价、库存类维度可能整表刷新,共用一个阈值必然一边漏报一边误报。