Skip to the page
Tecyfy

Airflow interview question · easy

What is the data interval in Airflow? A new daily Dag with start_date set to today did not run today, and a colleague asks how to load the last 30 days it missed.

The short answerAirflow schedules a run for a period of data, the data interval, and starts it after the period has ended, so the run can see all of that period's data.

The full answer

Airflow schedules a run for a period of data, the data interval, and starts it after the period has ended, so the run can see all of that period's data. A @daily run for 1 January starts just after midnight on 2 January. The first interval begins at start_date, so a Dag with start_date today has its first run tomorrow, covering today. The run's logical date is the start of its interval, not the moment it ran. For the 30 missed days, run a backfill over those dates rather than turning catchup on.

1. One daily run, step by step

Value
Schedule@daily
Data interval2026-01-01 00:00 to 2026-01-02 00:00
Logical date2026-01-01 00:00
StartsJust after 2026-01-02 00:00

Inside a task, the interval is data_interval_start and data_interval_end, and those, not today's clock, say which day to load.

2. Why the new Dag waited

from airflow.sdk import DAG
import pendulum

with DAG(
    dag_id="daily_orders",
    schedule="@daily",
    start_date=pendulum.datetime(2026, 10, 16, tz="UTC"),
    catchup=False,
):
    ...

The first interval is 16 October. Its run starts after it ends, on 17 October. Nothing was wrong.

3. Catchup and backfill

  • Catchup (catchup=True) makes the scheduler create a run for every interval since start_date that has not run. It is off by default, and it should stay off for a Dag that is not written to load only its own interval.
  • Backfill runs a chosen range once, on purpose:
airflow backfill create --dag-id daily_orders \
  --from-date 2026-09-16 --to-date 2026-10-15 \
  --max-active-runs 3 \
  --reprocess-behavior failed

--max-active-runs keeps 30 runs from hitting the source at once, and --reprocess-behavior says what to do with intervals that already ran (here, rerun only the failed ones).

4. What makes a backfill safe

Each run must load exactly its own interval and overwrite it, so running 30 old days gives 30 correct days, and running one twice changes nothing. See idempotent pipelines.

What interviewers want: a run covers an interval and starts after it ends, the first run one interval after start_date, logical date as the interval's start, catchup off by default, backfill for a chosen range with a limit on parallel runs, and tasks that load their own interval.

Last updated 16 October 2026

Sources

Where each fact comes from

  1. 1Dag Runs