及时性校验是什么
及时性(新鲜度)校验看数据是否按时可用,而不看内容是否正确:分区产出时间与承诺 SLA 的比较、最新分区相对今天的滞后天数、下游开始时间是否早于上游完成时间。及时性问题的根因通常在调度依赖、资源竞争或上游延迟,因此多数情况下要治调度而不是治数据。
基本信息
| 核心指标 | 产出时间、滞后天数、SLA 达成率、依赖倒挂次数 |
|---|---|
| 数据来源 | 调度平台任务结束时间、数仓表最近更新时间、元数据 |
| 判定方式 | 超过承诺时间未产出即告警,并要求责任人可追溯 |
| 常见根因 | 上游延迟、集群资源竞争、长事务锁、数据量激增 |
| 落地位置 | 稽核结果表 + 监控看板,与质量规则共用一套告警通道 |
典型使用场景
- 早间报表保障:确认核心表在承诺时间前产出,避免业务侧空等
- 依赖倒挂排查:下游已开始运行但上游分区还没生成
- SLA 月度结算:统计各表达成率,识别长期拖尾的任务
- 容量预警:产出时间持续后移通常预示数据量或资源问题
- 故障定位辅助:多个表同时延迟往往是集群或公共上游问题
产出滞后检查
产出滞后检查
-- 最新分区与今天相差几天,>0 即存在空缺
SELECT MAX(dt) AS latest_dt,
DATEDIFF(CURRENT_DATE, MAX(dt)) AS lag_days
FROM dwd_trade_order_detail_di;
-- 分区缺失明细:近 7 天应每天一行,少于 7 行说明有断档
SELECT dt, COUNT(1) AS rows_cnt, MAX(etl_time) AS etl_time
FROM dwd_trade_order_detail_di
WHERE dt >= DATE_SUB(CURRENT_DATE, 7)
GROUP BY dt
ORDER BY dt;SLA 达成率统计
SLA 达成率统计
-- ready_time 取数仓侧产出时间,promise_time 为承诺时间
SELECT dt,
COUNT(1) AS task_cnt,
SUM(CASE WHEN ready_time <= promise_time THEN 1 ELSE 0 END) AS ok_cnt,
ROUND(SUM(CASE WHEN ready_time <= promise_time THEN 1 ELSE 0 END) / COUNT(1), 4) AS sla_rate,
ROUND(AVG(TIMESTAMPDIFF(MINUTE, promise_time, ready_time)), 1) AS avg_delay_min
FROM etl_task_ready_log
WHERE dt >= '2026-10-01'
GROUP BY dt
ORDER BY dt;指标读法
| 指标 | 含义 | 异常表现 |
|---|---|---|
| lag_days | 最新分区距今天数 | 大于 0 说明有分区未产出 |
| ready_time | 分区可用时间 | 晚于承诺时间即 SLA 未达成 |
| sla_rate | 按天达成比例 | 连续低于目标说明根因未解决 |
| avg_delay_min | 平均延后分钟数 | 逐步扩大预示容量或依赖问题 |
| 依赖倒挂次数 | 下游先于上游运行 | 大于 0 会出现读空或读旧数据 |
及时性告警必须区分「还没到点」和「已超时」:按调度计划时间判断,否则凌晨会收到大量无意义提醒,真正超时的那条反而被淹没。
只监控任务失败是不够的:任务成功但产出 0 行、或只写了空分区同样会导致报表读空,及时性校验要同时看产出时间和产出行数。