Шаг 1 из 3

В Airflow есть две важные концепции, которые необходимо хорошо понимать: Backfill и Catchup.

Catchup

Как вы уже знаете, запуски DAGов (DagRuns) рассчитываются на основе start_date + schedule_interval, также опционально можно указать end_date (последний период запусков). По умолчанию планировщик Airflow поставит в расписание все периоды начиная со start_date + schedule_interval и до end_date (или текущего времени) как только вы активируете DAG в веб-панели.

На примере New York Yellow Taxi начало периода это 1 января 2020 года, интервал запусков — раз в месяц, end_date не указан. На момент написания этих строк на дворе март 2021 года. Это значит, что всего периодов запуска будет 14: весь 2020 год (12 запусков) + 2 запуска за 2021 года (январь и февраль). Они будут запланированы моментально после активации DAG. Чтобы изменить это поведение необходимо в настройках конкретного DAG прописать catchup=False:

@dag(default_args=default_args,
     schedule_interval='@monthly',
     start_date=datetime(2020, 1, 1),
     catchup=False,
)
...

В этом случае будет запланирован лишь последний запуск — для марта 2021 года это будет запуск за февраль 2021 (execution_date = 2021-02-01)

Также catchup можно запретить для всех DAG, если в файле конфигурации airflow.cfg найти параметр catchup_by_default и изменить значение на False:

catchup_by_default = False

Комментарии