Data SLAs
| SLA type | Example |
|---|---|
| Freshness | Gold revenue_daily ready by 6 AM UTC |
| Completeness | Row count within 5% of source |
| Correctness | Zero null in customer_id |
Airflow SLA misses alert when a task instance finishes too late — different from data quality SLAs but both matter.
Backfills
When: bug fix, new column, historical reprocessing.
Steps:
- Freeze downstream consumers or version tables
- Delete or overwrite affected partitions (Delta
replaceWhere, Iceberg overwrite) - Run backfill —
airflow dags backfillor parallel partition jobs - Validate — row counts, checksums, dbt tests
- Unblock consumers
catchup=True on a new DAG replays every missed execution_date — can overwhelm cluster. Use intentionally.
Idempotent writes
Every task must survive retry:
| Pattern | Idempotent? |
|---|---|
INSERT append | No — duplicates on retry |
INSERT OVERWRITE partition | Yes — if partition is full replace |
| Merge (upsert) on key | Yes — with deterministic keys |
| Delete + insert partition | Yes — atomic in Delta/Iceberg |
Link to Distributed Systems — at-least-once task execution is the default; idempotent sinks give effective exactly-once.
Late-arriving data
Options:
- Re-run last N days nightly (simple, expensive)
- Incremental merge job for late events
- Streaming correction side channel
Orchestrator schedules the strategy — engine executes it.
Interview answer template
"Tasks are partition-overwrite idempotent. On retry, rewriting dt=2026-07-09 is safe. For a 30-day backfill I'd disable the downstream DAG, run parallel EMR steps per week, validate with Great Expectations, then re-enable."
Further Reading
Hands-On Tasks (Optional)
Pipeline design drills and whiteboard exercises — DAG sketches, partition plans, backfill strategies. Assumes Databases and SQL fundamentals are in place.
- Plan a 30-day backfill20m
A bug corrupted silver layer for September. Describe: pause DAG?, partition overwrite strategy, idempotent write pattern, how to avoid duplicating gold aggregates, stakeholder comms.