数据新鲜度监控

新鲜度监控跟踪每张关键表最新分区的更新时间与业务时间差,按承诺时间分级告警;它回答的是现在能不能用的问题,是值班看板的常用首屏指标。

新鲜度监控是什么

新鲜度监控跟踪每张关键表最新分区的业务日期与分区写入时间,回答的是“现在这份数据能不能用”。两类延迟要分开看:业务延迟指最新分区日期与当前日期的差值,说明数据覆盖到哪一天;写入延迟指分区实际写入时间与承诺产出时间的差值,说明今天的任务有没有按时跑完。按链路的承诺时间分级预警(例如承诺 06:00 产出,05:40 开始预警),并把结果聚合成值班首屏。

基本信息

监控指标最新分区值、分区写入时间、业务延迟与写入延迟
采集方式元数据接口(Metastore、数据地图)或直接查询目标表
分级按承诺产出时间提前 N 分钟预警,超时升级
看板按链路聚合,先看链路再看单表
覆盖范围核心链路的关键产出表与对外交付表

典型使用场景

  • 值班首屏:早上第一时间确认核心表是否都已产出
  • 对外交付前确认依赖表的分区是否到位,避免发出半成品报表
  • 上游接口延迟时判断是数据没到还是任务没跑
  • 补数之后确认业务延迟已归零,而不是只看任务成功状态
  • 新增表接入时把它纳入监控清单,避免无人覆盖

新鲜度查询

新鲜度查询
-- 业务延迟:最新分区与当前日期的差值
SELECT MAX(dt) AS latest_dt,
       DATEDIFF(CURRENT_DATE, MAX(dt)) AS biz_lag_days
FROM dwd_trade_order_detail_di;

-- 写入延迟:结合元数据取分区写入时间(字段名按平台调整)
SELECT table_name, dt, write_time
FROM table_partition_meta
WHERE table_name IN ('dwd_trade_order_detail_di','dws_trade_user_1d')
ORDER BY write_time DESC;

-- 链路视图:按依赖层级聚合,先看链路再看单表
SELECT chain_name, MAX(biz_lag_days) AS max_biz_lag,
       SUM(CASE WHEN write_time > sla_time THEN 1 ELSE 0 END) AS breach_cnt
FROM table_freshness_view WHERE dt = CURRENT_DATE GROUP BY chain_name;

两个延迟分别说明什么

指标含义正常值异常含义
业务延迟最新分区日期与今天相差天数T+1 表为 1大于 1 说明历史数据缺口
写入延迟分区写入时间晚于承诺时间小于 0(按时)大于 0 说明当日产出超时
分区是否存在目标分区有无数据当日分区存在缺失说明任务未产出
异常分区空跑分区存在但行数为 0行数大于 0空跑会伪装成产出成功
新鲜度要按业务日期而不是写入日期判断:补昨天的数据与正常产出今天的数据含义完全不同,只看写入时间会把补数误判为正常。
分区存在不等于数据可用:任务成功但写出空分区的情况必须用行数共同判断,否则会误报正常。
监控表清单要跟着建模流程更新,新表上线时同步注册;清单长期不更新时,新增的关键表会长期处于无监控状态。

易错点

  • 只看写入时间不看业务日期,补数被误判为正常,历史缺口长期存在
  • 监控表清单长期不更新,新上线关键表无人覆盖
  • 把分区存在当作产出成功,空跑分区让告警体系发出错误的安全信号
  • 承诺时间没有和业务方约定并写进配置,值班判断超时与否全靠经验

数据来源与参考

  • 行业数据平台新鲜度监控实践
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌