Bird
Raised Fist0
Apache Airflowdevops~20 mins

Catchup and backfill behavior in Apache Airflow - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Catchup Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
What happens when catchup is set to True in Airflow?

In Airflow, if you set catchup=True for a DAG, what behavior should you expect when the DAG is first deployed?

AAirflow will only run the DAG for the current date and ignore past schedules.
BAirflow will run all past scheduled DAG runs from the start date until now to catch up.
CAirflow disables scheduling and requires manual trigger for all runs.
DAirflow skips all runs and marks them as success without execution.
Attempts:
2 left
💡 Hint

Think about what 'catching up' means in terms of scheduled runs.

💻 Command Output
intermediate
2:00remaining
Output of backfill command with catchup disabled

Given a DAG with catchup=False, what will be the output when running airflow dags backfill -s 2024-01-01 -e 2024-01-03 my_dag?

Apache Airflow
airflow dags backfill -s 2024-01-01 -e 2024-01-03 my_dag
ABackfill command fails with an error about catchup being disabled.
BNo DAG runs are executed because catchup is disabled.
COnly the DAG run for 2024-01-03 is executed.
DRuns DAG for 2024-01-01, 2024-01-02, and 2024-01-03 regardless of catchup setting.
Attempts:
2 left
💡 Hint

Remember that backfill manually triggers runs regardless of catchup.

❓ Troubleshoot
advanced
2:00remaining
Why are past DAG runs not executing despite catchup=True?

You have a DAG with catchup=True and a start_date set to 10 days ago. However, no past DAG runs are executing. What is the most likely cause?

AThe Airflow scheduler is not running.
BThe DAG file has syntax errors preventing execution.
CThe DAG's <code>schedule_interval</code> is set to None, so no scheduled runs exist.
DThe DAG's <code>max_active_runs</code> is set to 0.
Attempts:
2 left
💡 Hint

Check if the DAG has a schedule defined.

🔀 Workflow
advanced
3:00remaining
Order of operations when enabling catchup on an existing DAG

Arrange the steps in the correct order to enable catchup on an existing DAG and ensure past runs are executed.

A3,1,2,4
B1,3,2,4
C3,2,1,4
D1,2,3,4
Attempts:
2 left
💡 Hint

Think about what must be set before enabling catchup and restarting scheduler.

✅ Best Practice
expert
3:00remaining
Best practice to avoid unintended backfill when enabling catchup

You want to enable catchup=True on a DAG but avoid running all past missed DAG runs immediately. What is the best practice to achieve this?

ASet the DAG's <code>start_date</code> to the current date before enabling catchup.
BManually trigger a backfill for all past dates before enabling catchup.
CSet <code>max_active_runs</code> to 1 to limit catchup runs.
DDisable the scheduler temporarily while enabling catchup.
Attempts:
2 left
💡 Hint

Consider how Airflow decides which past runs to execute.

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