← astronomer-dataCONTENT HISTORYWHAT CHANGED · RULE-BASED ANALYSIS
Update to astronomer-data
Snapshot Sep 30, 2026 · 23:17 UTC · version 0.1.0
Collection source: not recorded for this historical snapshot.
First saved snapshot
No earlier snapshot is available to establish a change.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"name": "checking-freshness",
"description": "Quick data freshness check. Use when the user asks if data is up to date, when a table was last updated, if data is stale, or needs to verify data currency before using it.",
"included_files": [],
"skill_md_contents": "---\nname: checking-freshness\ndescription: Quick data freshness check. Use when the user asks if data is up to date, when a table was last updated, if data is stale, or needs to verify data currency before using it.\n---\n\n# Data Freshness Check\n\nQuickly determine if data is fresh enough to use.\n\n## Freshness Check Process\n\nFor each table to check:\n\n### 1. Find the Timestamp Column\n\nLook for columns that indicate when data was loaded or updated:\n- `_loaded_at`, `_updated_at`, `_created_at` (common ETL patterns)\n- `updated_at`, `created_at`, `modified_at` (application timestamps)\n- `load_date`, `etl_timestamp`, `ingestion_time`\n- `date`, `event_date`, `transaction_date` (business dates)\n\nQuery INFORMATION_SCHEMA.COLUMNS if you need to see column names.\n\n### 2. Query Last Update Time\n\n```sql\nSELECT\n MAX(<timestamp_column>) as last_update,\n CURRENT_TIMESTAMP() as current_time,\n TIMESTAMPDIFF('hour', MAX(<timestamp_column>), CURRENT_TIMESTAMP()) as hours_ago,\n TIMESTAMPDIFF('minute', MAX(<timestamp_column>), CURRENT_TIMESTAMP()) as minutes_ago\nFROM <table>\n```\n\n### 3. Check Row Counts by Time\n\nFor tables with regular updates, check recent activity:\n\n```sql\nSELECT\n DATE_TRUNC('day', <timestamp_column>) as day,\n COUNT(*) as row_count\nFROM <table>\nWHERE <timestamp_column> >= DATEADD('day', -7, CURRENT_DATE())\nGROUP BY 1\nORDER BY 1 DESC\n```\n\n## Freshness Status\n\nReport status using this scale:\n\n| Status | Age | Meaning |\n|--------|-----|---------|\n| **Fresh** | < 4 hours | Data is current |\n| **Stale** | 4-24 hours | May be outdated, check if expected |\n| **Very Stale** | > 24 hours | Likely a problem unless batch job |\n| **Unknown** | No timestamp | Can't determine freshness |\n\n## If Data is Stale\n\nCheck Airflow for the source pipeline:\n\n1. **Find the DAG**: Which DAG populates this table? Use `af dags list` and look for matching names.\n\n2. **Check DAG status**:\n - Is the DAG paused? Use `af dags get <dag_id>`\n - Did the last run fail? Use `af dags stats`\n - Is a run currently in progress?\n\n3. **Diagnose if needed**: If the DAG failed, use the **debugging-dags** skill to investigate.\n\n### On Astro\n\nIf you're running on Astro, you can also:\n\n- **DAG history in the Astro UI**: Check the deployment's DAG run history for a visual timeline of recent runs and their outcomes\n- **Astro alerts for SLA monitoring**: Configure alerts to get notified when DAGs miss their expected completion windows, catching staleness before users report it\n\n### On OSS Airflow\n\n- **Airflow UI**: Use the DAGs view and task logs to verify last successful runs and SLA misses\n\n## Output Format\n\nProvide a clear, scannable report:\n\n```\nFRESHNESS REPORT\n================\n\nTABLE: database.schema.table_name\nLast Update: 2024-01-15 14:32:00 UTC\nAge: 2 hours 15 minutes\nStatus: Fresh\n\nTABLE: database.schema.other_table\nLast Update: 2024-01-14 03:00:00 UTC\nAge: 37 hours\nStatus: Very Stale\nSource DAG: daily_etl_pipeline (FAILED)\nAction: Investigate with **debugging-dags** skill\n```\n\n## Quick Checks\n\nIf user just wants a yes/no answer:\n- \"Is X fresh?\" -> Check and respond with status + one line\n- \"Can I use X for my 9am meeting?\" -> Check and give clear yes/no with context\n"
}SHA-256: fb9f9b03387cdbd4d2b34539f0ec54cd0504defc9be15e399f7afb912a9058bc