Bird
Raised Fist0
Apache Airflowdevops~10 mins

Catchup and backfill behavior in Apache Airflow - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to disable catchup in an Airflow DAG.

Apache Airflow
dag = DAG('example_dag', catchup=[1])
Drag options to blanks, or click blank then click option'
ATrue
B'False'
CFalse
Dnone
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'False' as a string instead of the boolean False.
2fill in blank
medium

Complete the code to set the start date for an Airflow DAG to January 1, 2023.

Apache Airflow
dag = DAG('example_dag', start_date=datetime([1]))
Drag options to blanks, or click blank then click option'
A2023, 1, 1
B2023, 12, 31
C2024, 1, 1
D2022, 1, 1
Attempts:
3 left
💡 Hint
Common Mistakes
Using the wrong year or month values.
3fill in blank
hard

Fix the error in the DAG definition to enable backfill for missed runs.

Apache Airflow
dag = DAG('example_dag', catchup=[1])
Drag options to blanks, or click blank then click option'
AFalse
BTrue
CNone
D'True'
Attempts:
3 left
💡 Hint
Common Mistakes
Using string 'True' instead of boolean True.
4fill in blank
hard

Fill both blanks to create a DAG that starts on March 1, 2023 and disables catchup.

Apache Airflow
dag = DAG('example_dag', start_date=datetime([1]), catchup=[2])
Drag options to blanks, or click blank then click option'
A2023, 3, 1
BFalse
CTrue
D2023, 1, 1
Attempts:
3 left
💡 Hint
Common Mistakes
Mixing up the date or using catchup=True by mistake.
5fill in blank
hard

Fill all three blanks to define a DAG with start date April 10, 2023, catchup enabled, and schedule interval daily.

Apache Airflow
dag = DAG('example_dag', start_date=datetime([1]), catchup=[2], schedule_interval=[3])
Drag options to blanks, or click blank then click option'
A2023, 4, 10
BTrue
C'@daily'
DFalse
Attempts:
3 left
💡 Hint
Common Mistakes
Using catchup=False when backfill is needed.
Wrong schedule interval string.

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