Suppose a daily workflow analyzes website events, but it starts after several days of events have accumulated. Backfilling runs the DAG for past schedule intervals so those missing days can be processed. Each run handles its own interval rather than reprocessing the entire dataset. section 3.0 section 1.2.5
Set a DAG start date in the past and explicitly enable catchup to create historical runs. Airflow 3 disables catchup by default; Airflow 2 enables it by default. Setting it explicitly avoids a change in behavior when moving between versions. section 3.6 section 3.8
Reprocess a changed calculation
If calc_statistics gains a new statistic, clear its past task runs to recalculate historical results with the new code. This can work even when the original event API retains only seven days of history, provided earlier runs stored the needed data partitions. Loading older events directly from that API remains limited to seven days. section 3.6
Plan for load before enabling a large backfill: Airflow may create hundreds of parallel DAG runs, crowding out other work or overloading external systems. Pools and DAG-level limits such as max_active_tasks and max_active_runs can constrain concurrency. Tasks should also be safe to rerun; idempotency means unchanged inputs do not change the result. section 3.6 section 3.8
