mcpField
C
checking-freshness

checking-freshness

github.com/astronomer数据与数据库4571.0k 次安装3 周前更新
代码仓库

关于 checking-freshness

面向数据使用者的数据新鲜度检查技能,通过时间戳和近期行数判断数据是否最新、过期或未知;发现过期时还可检查 Airflow 状态。

主要功能

  1. 01定位可能的时间戳列
  2. 02计算距上次更新的时间
  3. 03检查近期行数
  4. 04判定数据新鲜度状态
  5. 05过期时检查 Airflow 运行

适用场景

  1. 01在会议使用数据前确认时效
  2. 02检查近期每日加载是否发生
  3. 03通过流水线状态排查过期数据

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/astronomer/agents --skill checking-freshness

安装后在 Claude Code 中输入/checking-freshness确认已加载。

详细介绍

数据新鲜度检查

快速判断数据是否足够新,可以使用。

新鲜度检查流程

对每张要检查的表:

1. 查找时间戳列

查找用于指示数据加载或更新时间的列:

  • _loaded_at、_updated_at、_created_at(常见的 ETL 模式)
  • updated_at、created_at、modified_at(应用程序时间戳)
  • load_date、etl_timestamp、ingestion_time
  • date、event_date、transaction_date(业务日期)

如果需要查看列名,请查询 INFORMATION_SCHEMA.COLUMNS。

2. 查询上次更新时间
SELECT
    MAX(<timestamp_column>) as last_update,
    CURRENT_TIMESTAMP() as current_time,
    TIMESTAMPDIFF('hour', MAX(<timestamp_column>), CURRENT_TIMESTAMP()) as hours_ago,
    TIMESTAMPDIFF('minute', MAX(<timestamp_column>), CURRENT_TIMESTAMP()) as minutes_ago
FROM <table>
3. 按时间检查行数

对于定期更新的表,请检查近期活动:

SELECT
    DATE_TRUNC('day', <timestamp_column>) as day,
    COUNT(*) as row_count
FROM <table>
WHERE <timestamp_column> >= DATEADD('day', -7, CURRENT_DATE())
GROUP BY 1
ORDER BY 1 DESC

新鲜度状态

使用以下等级报告状态:

状态时长含义
新鲜< 4 小时数据是最新的
陈旧4-24 小时可能已过时,请检查是否符合预期
非常陈旧> 24 小时除非是批处理作业,否则很可能存在问题
未知无时间戳无法确定新鲜度

如果数据已陈旧

检查源数据管道对应的 Airflow:

  1. 查找 DAG:哪个 DAG 在填充这张表?使用 af dags list 并查找匹配的名称。

  2. 检查 DAG 状态:

    • DAG 是否已暂停?使用 af dags get <dag_id>
    • 上次运行是否失败?使用 af dags stats
    • 当前是否有运行正在进行?
  3. 按需诊断:如果 DAG 失败,请使用 debugging-dags 技能进行调查。

在 Astro 上

如果你在 Astro 上运行,还可以:

  • Astro UI 中的 DAG 历史记录:查看部署的 DAG 运行历史记录,直观了解近期运行的时间线及其结果
  • 用于 SLA 监控的 Astro 警报:配置警报,在 DAG 未能按预期时间完成时收到通知,以便在用户报告之前发现数据陈旧问题
在 OSS Airflow 上
  • Airflow UI:使用 DAG 视图和任务日志,确认上次成功运行的时间并检查 SLA 是否有遗漏

输出格式

提供清晰易读、便于快速浏览的报告:

FRESHNESS REPORT
================

TABLE: database.schema.table_name
Last Update: 2024-01-15 14:32:00 UTC
Age: 2 hours 15 minutes
Status: Fresh

TABLE: database.schema.other_table
Last Update: 2024-01-14 03:00:00 UTC
Age: 37 hours
Status: Very Stale
Source DAG: daily_etl_pipeline (FAILED)
Action: Investigate with **debugging-dags** skill

快速检查

如果用户只想得到是或否的答案:

  • “X 是最新的吗?” -> 检查并回复状态 + 一句话说明
  • “我可以在上午 9 点的会议上使用 X 吗?” -> 检查并给出明确的是或否,并附上背景说明

评论

支持 Markdown