С 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?Или я должен изменить исходный код воздушного потока ...