Как сделать запуск расписания воздушного потока на start_date вместо execute_date (сделать execute_date равным start_date)? - PullRequest
0 голосов
/ 23 сентября 2019

С https://airflow.apache.org/scheduler.html:

Обратите внимание, что если вы запустите группу обеспечения доступности баз данных с интервалом schedule_int на один день, запуск с отметкой 2016-01-01 будет запущен вскоре после 2016-01-01T23: 59.Другими словами, экземпляр задания запускается по окончании периода, который он охватывает.

Эта функция очень повреждена.

Например, у меня есть задание etl, которое выполняется каждый день, schedule_interval равно 0 1 * * *, поэтому оно будет запускать задание 2019-09-22 01:00:00 2019-09-23 01:00:00.Но мой etl обрабатывает все данные до start_date, это означает, что диапазон данных находится между (history, 2019-09-23 00:00:00), и мы не можем использовать datetime.now(), потому что он не может воспроизвести.Это вынуждает меня добавить 1 день к execute_date:

etl_end_time = "{{ (execution_date + macros.timedelta(days=1)).strftime('%Y-%m-%d 00:00:00') }}"

Однако, когда мне нужно запустить задание с schedule_interval 45 2,3,4,5,6 * * *, задание 2019-09-22 06:45:00 будет выполняться на 2019-09-23 02:45:00, то есть через один день после execute_date(время следующего исполнения).Вместо добавления дня я должен был изменить schedule_interval 45 2,3,4,5,6,7 * * * и поставить фиктивный оператор при последнем запуске.И в этой ситуации вам не нужно добавлять один день к execute_date, это означает, что вы должны определить два etl_end_time для представления одной и той же даты в заданиях с различным schedule_interval.

Все это очень неудобно для меня, есть ли какой-либо конфиг или встроенный метод, чтобы сделать execute_date равным start_date?Или я должен изменить исходный код воздушного потока ...

Ответы [ 2 ]

0 голосов
/ 24 сентября 2019

Я обнаружил, что есть pr https://github.com/apache/airflow/pull/5787

Это изменение вводит атрибут schedule_interval_edge, строку, содержащую 'start' или 'end', для групп DAG.Планировщик использует это значение для определения того, следует ли планировать DAG в начале или в конце интервала расписания.

Параметр с тем же именем был также добавлен в default_airflow.cfg в разделе [scheduler].

Я взял коды в этом пр.

0 голосов
/ 23 сентября 2019

для запланированного запуска, next_execution_date вернет точное время при запуске.

...