Bird
Raised Fist0
Apache Airflowdevops~5 mins

Execution date vs logical date in Apache Airflow - CLI Comparison

Choose your learning style10 modes available
Introduction
In Airflow, tasks run on schedules, and each run has two important dates: the execution date and the logical date. These dates help track when a task is supposed to run versus when it actually runs, which can be confusing at first.
When you want to understand why a task run is labeled with a date that seems earlier than the current time.
When you need to debug why data processed in a task corresponds to a previous day or period.
When scheduling daily reports that should process data from the previous day.
When setting up dependencies between tasks that rely on specific data intervals.
When monitoring backfills or reruns of past scheduled tasks.
Commands
This command triggers the DAG named 'example_dag' with an explicit execution date of June 1, 2024. The execution date represents the logical date Airflow uses to identify the run.
Terminal
airflow dags trigger example_dag --exec-date 2024-06-01T00:00:00+00:00
Expected OutputExpected
Created <DagRun example_dag @ 2024-06-01 00:00:00+00:00: manual__2024-06-01T00:00:00+00:00, externally triggered: True>
→
--exec-date - Sets the execution (logical) date for the DAG run
Lists all tasks in the 'example_dag' so you can see what tasks will run for the given execution date.
Terminal
airflow tasks list example_dag
Expected OutputExpected
task_1 task_2 task_3
Runs the task 'task_1' from 'example_dag' for the execution date June 1, 2024, simulating the run without scheduling it. This helps understand what data the task processes for that logical date.
Terminal
airflow tasks test example_dag task_1 2024-06-01
Expected OutputExpected
[2024-06-01 00:00:00,000] {taskinstance.py:xxxx} INFO - Starting attempt 1 of 1 [2024-06-01 00:00:01,000] {taskinstance.py:xxxx} INFO - Task succeeded
Shows all runs of 'example_dag' with their execution dates and states, helping you see how execution dates relate to actual run times.
Terminal
airflow dags list-runs -d example_dag
Expected OutputExpected
dag_id execution_date start_date state example_dag 2024-06-01 00:00:00 2024-06-01 00:05:00 success
→
-d - Specifies the DAG to list runs for
Key Concept

The execution date (logical date) in Airflow represents the data interval the task run is processing, not the actual time the task runs.

Common Mistakes
Confusing execution date with the current date or actual run time.
This leads to misunderstanding task logs and data processed, causing confusion about when data was handled.
Always remember execution date is the logical date for the data interval, which can be earlier than the actual run time.
Triggering DAG runs without specifying execution date and expecting it to run for the current time.
Airflow uses the execution date to determine the data interval, so omitting it can cause unexpected behavior.
Specify the execution date explicitly when triggering manual runs to control which data interval is processed.
Summary
Execution date is the logical date Airflow uses to identify the data interval for a task run.
The actual run time can be later than the execution date, which can cause confusion.
Use commands like 'airflow dags trigger' with --exec-date to control the logical date of runs.

Practice

(1/5)
1. What does the logical date in Airflow represent?
easy
A. The time period the task is processing data for
B. The exact time the task started running
C. The current system time when the task runs
D. The time when the DAG was created

Solution

  1. Step 1: Understand the definition of logical date

    The logical date is the timestamp representing the data interval the task is working on, not when it runs.
  2. Step 2: Differentiate from execution date

    Execution date is when the task actually runs, but logical date points to the data period it processes.
  3. Final Answer:

    The time period the task is processing data for -> Option A
  4. Quick Check:

    Logical date = data period [OK]
Hint: Logical date = data period, execution date = run time [OK]
Common Mistakes:
  • Confusing logical date with actual run time
  • Thinking logical date is current system time
  • Mixing execution date with DAG creation time
2. Which of the following is the correct way to access the logical date inside an Airflow task?
easy
A. Using context['execution_date']
B. Using context['logical_date']
C. Using context['run_time']
D. Using context['start_date']

Solution

  1. Step 1: Recall Airflow context variables

    Airflow provides logical_date in the context to represent the logical date of the task instance.
  2. Step 2: Identify the correct key for logical date

    The key 'logical_date' is used to access the logical date, while 'execution_date' is deprecated in newer versions.
  3. Final Answer:

    Using context['logical_date'] -> Option B
  4. Quick Check:

    Access logical date with context['logical_date'] [OK]
Hint: Use context['logical_date'] for logical date in Airflow 2.2+ [OK]
Common Mistakes:
  • Using deprecated 'execution_date' key
  • Trying to access logical date with 'run_time'
  • Confusing start_date with logical date
3. Given a DAG scheduled daily at midnight, if a task runs on 2024-06-10 00:00 UTC, what is its logical date?
medium
A. 2024-06-10 00:00 UTC
B. 2024-06-11 00:00 UTC
C. 2024-06-09 00:00 UTC
D. The current system time when the task runs

Solution

  1. Step 1: Understand daily scheduling in Airflow

    A DAG scheduled daily at midnight runs for the data of the previous day, so the logical date is the start of that previous day.
  2. Step 2: Calculate logical date for run on 2024-06-10 00:00 UTC

    The run at midnight on June 10 processes data for June 9, so logical date is 2024-06-09 00:00 UTC.
  3. Final Answer:

    2024-06-09 00:00 UTC -> Option C
  4. Quick Check:

    Run time = June 10, logical date = June 9 [OK]
Hint: Logical date is previous day for daily midnight runs [OK]
Common Mistakes:
  • Assuming logical date equals execution date
  • Using current system time as logical date
  • Confusing next day as logical date
4. You see a task's logs showing execution_date as 2024-06-10 but the data processed is from 2024-06-11. What is the likely issue?
medium
A. The task is running twice for the same data
B. The DAG schedule interval is set to hourly instead of daily
C. The system clock is incorrect
D. The task is using execution_date instead of logical_date for data filtering

Solution

  1. Step 1: Analyze mismatch between execution_date and data date

    If data processed is from a later date than execution_date, the task likely uses execution_date (run time) instead of logical_date (data period) for filtering.
  2. Step 2: Understand correct usage of logical date

    Logical date should be used to select data for the intended period; using execution_date causes off-by-one errors.
  3. Final Answer:

    The task is using execution_date instead of logical_date for data filtering -> Option D
  4. Quick Check:

    Use logical_date for data period, not execution_date [OK]
Hint: Use logical_date for data filtering, not execution_date [OK]
Common Mistakes:
  • Ignoring difference between execution and logical dates
  • Assuming schedule interval causes date mismatch
  • Blaming system clock without checking code
5. You want to process hourly data with a DAG scheduled every hour. The task should process data for the previous hour. Which date should you use inside the task to filter data correctly?
hard
A. Use logical_date which represents the data interval start
B. Use DAG start_date
C. Use current system time when the task runs
D. Use execution_date which is the task run time

Solution

  1. Step 1: Understand hourly scheduling and data processing

    For hourly DAGs, the logical date marks the start of the hour for which data is processed, typically the previous hour.
  2. Step 2: Choose the correct date for filtering data

    Using logical_date ensures the task filters data for the correct hour interval, not the actual run time.
  3. Final Answer:

    Use logical_date which represents the data interval start -> Option A
  4. Quick Check:

    Hourly data uses logical_date for correct filtering [OK]
Hint: For hourly data, always use logical_date for filtering [OK]
Common Mistakes:
  • Using execution_date causes off-by-one hour errors
  • Using current time ignores schedule intervals
  • Confusing DAG start_date with data interval
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