SuperAPI AI 工具集

checking-freshness

数据与分析

查看项目

更新于 10-14 05:32

技能介绍

用途

checking-freshness 是一个数据新鲜度检查技能。它用于快速判断数据是否足够新、是否可以使用,适用于用户询问数据是否最新、某张表上次何时更新、数据是否已过期,或需要验证数据时效性的场景。

主要能力

该技能的核心是判断数据新鲜度,并输出可快速浏览的报告。其处理流程针对每一张需要检查的表:

  1. 查找时间戳列:寻找表示数据加载或更新时间的时间戳列,常见 ETL 模式如 _loaded_at、_updated_at、_created_at;应用时间戳如 updated_at、created_at、modified_at;加载时间如 load_date、etl_timestamp、ingestion_time;业务日期如 date、event_date、transaction_date。如需查看列名,可查询 INFORMATION_SCHEMA.COLUMNS。

  2. 查询最后更新时间:使用 SQL 查询最大时间戳、当前时间,以及距离当前时间的小时数和分钟数。示例查询:

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>
  1. 按时间检查行数:对于定期更新的表,检查近期活动。示例查询:
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

新鲜度状态判定

该技能使用以下标准报告状态:

  • Fresh(新鲜):小于 4 小时,数据是最新的。
  • Stale(陈旧):4-24 小时,可能已过期,需检查是否符合预期。
  • Very Stale(非常陈旧):超过 24 小时,除非是批处理任务,否则很可能有问题。
  • Unknown(未知):没有时间戳,无法判断新鲜度。

数据陈旧时的处理

如果数据被判定为陈旧,可检查源管道的 Airflow:

  • 找到 DAG:哪张表由哪个 DAG 填充?使用 af dags list 查找匹配名称。
  • 检查 DAG 状态:
    • DAG 是否已暂停?使用 af dags get <dag_id>。
    • 上次运行是否失败?使用 af dags stats。
    • 当前是否有运行正在进行?
  • 按需诊断:如果 DAG 失败,使用 debugging-dags 技能进行调查。

在 Astro 上运行时,还可以:

  • 在 Astro UI 中查看 DAG 历史:查看部署的 DAG 运行历史,获得近期运行及其结果的视觉时间线。
  • 使用 Astro 告警进行 SLA 监控:配置告警,在 DAG 未能在预期完成窗口内完成时收到通知,在用户报告之前发现陈旧问题。

在 OSS Airflow 上,可以使用 Airflow UI:使用 DAGs 视图和任务日志来验证上次成功运行与 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 吗?”——检查后给出明确的是/否并附上背景信息。