用途
checking-freshness 是一个数据新鲜度检查技能。它用于快速判断数据是否足够新、是否可以使用,适用于用户询问数据是否最新、某张表上次何时更新、数据是否已过期,或需要验证数据时效性的场景。
主要能力
该技能的核心是判断数据新鲜度,并输出可快速浏览的报告。其处理流程针对每一张需要检查的表:
-
查找时间戳列:寻找表示数据加载或更新时间的时间戳列,常见 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。 -
查询最后更新时间:使用 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>
- 按时间检查行数:对于定期更新的表,检查近期活动。示例查询:
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 是否已暂停?使用
- 按需诊断:如果 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 吗?”——检查后给出明确的是/否并附上背景信息。