质量规则的自测
质量规则本身也是代码,上线前同样要测试。成本最低的手段是构造数据:全空列、重复主键、越界枚举、恰好等于阈值的边界值各造一条,确认该失败的能失败、该通过的不误报。规则上线前再用历史分区回放一遍,估算真实命中量与误报率,避免阈值写错把全团队的告警刷屏。
基本信息
| 测试对象 | not_null、唯一性、枚举、区间、一致性等规则 |
|---|---|
| 构造样本 | 全空、重复、越界、边界值、正常值 |
| 回放方式 | 取历史分区跑新规则,统计命中量与占比 |
| 验收标准 | 异常样本必命中、正常样本不误报 |
| 上线方式 | 规则与调度任务同仓,流水线自动跑自测 |
典型使用场景
- 新规则上线前:用构造样本验证命中与误报
- 阈值调整后回归:确认调整没有放过真实问题
- 历史回放评估:拿上周真实数据估算命中量,避免告警刷屏
- 规则下线前验证:确认没有其他链路依赖这条规则的告警
- 变更评审:用样本现场跑给评审人看,而不是口头描述
构造样本验证规则
构造样本验证规则
WITH mock AS (
SELECT NULL AS order_id, -1 AS amount UNION ALL -- 全空主键 + 负值金额
SELECT 1001, 10 UNION ALL -- 正常记录
SELECT 1001, 20 -- 主键重复
)
SELECT
SUM(CASE WHEN order_id IS NULL THEN 1 ELSE 0 END) AS null_hit,
SUM(CASE WHEN amount < 0 THEN 1 ELSE 0 END) AS neg_hit,
COUNT(*) - COUNT(DISTINCT order_id) AS dup_hit
FROM mock;历史分区回放
历史分区回放
-- 用上周真实分区跑待上线规则,先看命中占比再定阈值
SELECT COUNT(*) AS hit_cnt,
COUNT(*) / (SELECT COUNT(*) FROM dwd_orders WHERE dt = '2026-10-04') AS hit_ratio
FROM dwd_orders
WHERE dt = '2026-10-04'
AND (order_id IS NULL OR amount < 0); -- 待上线规则的判定条件样本类型与预期结果
| 样本 | 构造方式 | 期望结果 |
|---|---|---|
| 全空列 | 主键或关键列为 NULL | not_null 命中 |
| 重复主键 | 两行使用同一主键 | 唯一性规则命中 |
| 越界值 | 枚举外状态码、负金额 | 枚举或区间规则命中 |
| 边界值 | 恰好等于与刚越过阈值 | 按闭区间还是开区间定义判定 |
| 正常值 | 符合业务分布 | 通过,不产生告警 |
历史分区回放是低成本验证:拿上周真实数据跑新规则,先看误报率再决定阈值。
回放要选有代表性的分区:只挑平稳日很难暴露大促或月末的口径差异,至少覆盖一个业务高峰分区。