Интервал расписания воздушного потока не вызывает DAG - PullRequest
0 голосов
/ 22 февраля 2019

Примечание: ссылки crontab.guru ломались, поэтому я обернул их в блоки кода.

У меня есть DAG, которая должна быть выполнена по понедельникам в полночь тихоокеанского времени, 8:00 UTC, увеличена на 1 минуту доизбегайте проблем с перекрытием.

Первоначально интервал расписания был установлен как 1 8 */1 * 1, что в соответствии с https://crontab.guru/#1_8_*/1_*_1 равно "В 08:01 UTC (03:01 EST, 00:01 PST) в каждый день-месяц, если это в понедельник ".

Однако это приводило к тому, что DAG запускался каждый день в 08:01 UTC;условие понедельника, казалось, игнорировалось.

Интервал расписания был обновлен до более простого 1 8 * * 1, что в соответствии с https://crontab.guru/#1_8_*_*_1 равно "В 08:01 UTC (03:01 EST, 00:01 PST)в понедельник ".

Это остановило выполнение DAG каждый день, но не сработало в 2019-02-18, первый понедельник, следующий за обновлением.Я читал некоторые другие сообщения, которые указывают, что дата начала может вызвать эту проблему, но дата начала этой задачи datetime(2019, 2, 11, 0, 0, 0, 0, pytz.UTC), то есть за два интервала до даты запуска 2019-02-18.

Вотполное определение группы доступности базы данных / задачи (без импорта или определенных имен):

dag = DAG(
    dag_id="dag",
    description="dag",
    # At 08:01 UTC (03:01 EST, 00:01 PST) on Monday
    # (https://crontab.guru/#1_8_*_*_1)
    schedule_interval="1 8 * * 1",
    catchup=False,
)


task = PythonOperator(
    task_id="handle",
    provide_context=True,
    python_callable=handle,
    dag=dag,
    retries=2,
    retry_delay=timedelta(minutes=15),
    start_date=datetime(2019, 2, 11, 0, 0, 0, 0, pytz.UTC),
)

Есть идеи, почему это не будет выполнено после интервала UTC 2019-02-18 ?:

1 Ответ

0 голосов
/ 24 февраля 2019

РЕДАКТИРОВАТЬ: причина, по которой вы не видите выполнение, выполненное 18-го числа, состоит в том, что у вас есть catchup=False

Это заставит DAG пропустить дни обратной засыпки, если они уже прошли.Если вы хотите, чтобы DAG заполнялись 17-го и 24-го числа, вам нужно установить catchup=True

DAG воздушного потока, выполняемые с END интервала Schedule , поэтому, если ваша дата начала - текущий понедельник, а интервал - каждый понедельник, группа обеспечения доступности баз данных не будет выполняться для запуска в этот понедельник до следующего понедельника.

Основная идея здесь заключается в том, что данные для текущего прогона в понедельник теперь доступны до конца этого интервала.Это дает вам больше смысла думать об этом с точки зрения повседневной работы.Если вы выполняете задание, которое ищет сегодняшние данные, этот набор данных не будет завершен до конца сегодняшнего дня.Поэтому, если вы хотите запустить данные за сегодня, вам нужно выполнить свою работу завтра.Это просто соглашение, которое Airflow принял, нравится вам это или нет.

Если вы хотите изменить даты, вы можете использовать {{ macros.ds_add( ds, 7) }}, чтобы сместить дату исполнения на 7 дней.

Дайте мне знать, если этот ответ имеет смысл.Если нет, я буду расширяться на этом.Это соглашение было самой неприятной деталью, с которой нам приходилось сталкиваться при разработке рабочих мест для Airflow.

...