Bird
Raised Fist0
Apache Airflowdevops~3 mins

Why Catchup and backfill behavior in Apache Airflow? - Purpose & Use Cases

Choose your learning style10 modes available
The Big Idea

What if your system could fix missed work all by itself, without you lifting a finger?

The Scenario

Imagine you have a daily task to process sales data, but your system was down for three days. You now need to run those missed days manually, one by one, to catch up.

The Problem

Manually running each missed task is slow and error-prone. You might forget a day or run tasks in the wrong order, causing inconsistent data and wasted time.

The Solution

Catchup and backfill behavior in Airflow automatically detects missed runs and executes them in the correct order, ensuring no data is lost and your workflow stays consistent.

Before vs After
✗ Before
airflow dags trigger process_sales --exec-date 2024-04-01
airflow dags trigger process_sales --exec-date 2024-04-02
airflow dags trigger process_sales --exec-date 2024-04-03
✓ After
airflow dags backfill process_sales -s 2024-04-01 -e 2024-04-03
What It Enables

You can trust your workflows to automatically fill gaps and keep data accurate without manual intervention.

Real Life Example

A marketing team missed running their daily campaign report for a weekend. Using backfill, Airflow runs those reports for the missed days automatically, so the team gets complete data on Monday morning.

Key Takeaways

Manual reruns are slow and risky.

Catchup and backfill automate missed task runs.

This keeps workflows reliable and data complete.

Practice

(1/5)
1. What does setting catchup=True do in an Airflow DAG?
easy
A. It manually triggers DAG runs for a specific date range.
B. It disables all scheduled DAG runs.
C. It deletes all past DAG runs.
D. It runs all missed DAG runs automatically to catch up.

Solution

  1. Step 1: Understand catchup parameter

    The catchup parameter controls whether Airflow runs missed DAG runs automatically.
  2. Step 2: Effect of catchup=True

    When catchup=True, Airflow schedules and runs all DAG runs that were missed since the last run.
  3. Final Answer:

    It runs all missed DAG runs automatically to catch up. -> Option D
  4. Quick Check:

    catchup=True means run missed DAG runs [OK]
Hint: Catchup=True means Airflow fills missed runs automatically [OK]
Common Mistakes:
  • Confusing catchup with manual backfill
  • Thinking catchup disables scheduling
  • Assuming catchup deletes runs
2. Which of the following is the correct way to disable catchup in an Airflow DAG definition?
easy
A. dag = DAG('my_dag', backfill=False)
B. dag = DAG('my_dag', catchup=True)
C. dag = DAG('my_dag', catchup=False)
D. dag = DAG('my_dag', schedule_interval=None)

Solution

  1. Step 1: Identify catchup parameter usage

    The catchup parameter is used to enable or disable catchup behavior in DAGs.
  2. Step 2: Disable catchup by setting catchup=False

    Setting catchup=False disables automatic running of missed DAG runs.
  3. Final Answer:

    dag = DAG('my_dag', catchup=False) -> Option C
  4. Quick Check:

    Disable catchup with catchup=False [OK]
Hint: Use catchup=False to stop automatic missed runs [OK]
Common Mistakes:
  • Using backfill parameter instead of catchup
  • Setting schedule_interval to None disables scheduling, not catchup
  • Setting catchup=True enables, not disables
3. Given a DAG with start_date='2024-04-01', schedule_interval='@daily', and catchup=True, if the DAG was paused and resumed on 2024-04-05, which DAG runs will Airflow execute immediately after resuming?
medium
A. Runs for 2024-04-01 to 2024-04-05
B. Only the run for 2024-04-05
C. No runs will be executed automatically
D. Runs for 2024-04-02 to 2024-04-04 only

Solution

  1. Step 1: Understand catchup=True behavior

    With catchup=True, Airflow runs all missed DAG runs from start_date to current date.
  2. Step 2: Identify missed runs

    The DAG was paused from 2024-04-01 to 2024-04-04, so runs for 2024-04-01, 02, 03, 04 were missed. On resuming 2024-04-05, Airflow runs all missed plus current.
  3. Final Answer:

    Runs for 2024-04-01 to 2024-04-05 -> Option A
  4. Quick Check:

    Catchup runs all missed dates including current [OK]
Hint: Catchup runs all missed dates from start_date to now [OK]
Common Mistakes:
  • Thinking only current date runs after resume
  • Ignoring runs before resume date
  • Assuming no runs run automatically after pause
4. You want to run DAG runs manually for the dates 2024-03-01 to 2024-03-05 without enabling catchup. Which command should you use?
medium
A. airflow dags backfill -s 2024-03-01 -e 2024-03-05 my_dag
B. airflow dags trigger my_dag --start-date 2024-03-01 --end-date 2024-03-05
C. airflow dags run my_dag 2024-03-01 to 2024-03-05
D. airflow dags catchup my_dag -s 2024-03-01 -e 2024-03-05

Solution

  1. Step 1: Identify manual run command for date range

    The airflow dags backfill command runs DAG runs manually for a specified date range.
  2. Step 2: Confirm correct syntax

    Using -s and -e flags with backfill specifies start and end dates for manual runs.
  3. Final Answer:

    airflow dags backfill -s 2024-03-01 -e 2024-03-05 my_dag -> Option A
  4. Quick Check:

    Backfill runs DAG manually for date range [OK]
Hint: Use airflow dags backfill with -s and -e for manual runs [OK]
Common Mistakes:
  • Using trigger command with date range flags (not supported)
  • Trying to use catchup command (does not exist)
  • Using dags run with invalid date range syntax
5. You have a DAG with catchup=False and a start_date set to 2024-01-01. You want to run all DAG runs from 2024-01-01 to 2024-01-10 manually. What is the best approach to achieve this without enabling catchup?
hard
A. Set catchup=True and wait for Airflow to run all missed DAG runs automatically.
B. Use the backfill command for the date range 2024-01-01 to 2024-01-10.
C. Manually trigger the DAG once on 2024-01-10; Airflow will run all previous runs.
D. Change the start_date to 2024-01-10 and run the DAG normally.

Solution

  1. Step 1: Understand catchup=False effect

    With catchup=False, Airflow skips running missed DAG runs automatically.
  2. Step 2: Use backfill to run missed DAG runs manually

    To run missed DAG runs without enabling catchup, use the backfill command specifying the date range.
  3. Final Answer:

    Use the backfill command for the date range 2024-01-01 to 2024-01-10. -> Option B
  4. Quick Check:

    Backfill runs missed DAG runs manually without catchup [OK]
Hint: Backfill runs missed DAG runs manually when catchup is off [OK]
Common Mistakes:
  • Enabling catchup when not desired
  • Assuming one trigger runs all missed dates
  • Changing start_date to skip missed runs
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard