Новичок в потоке воздуха, поступающем из cron, пытаясь понять, как макрос execution_date
применяется к системе планирования и когда запускается вручную. Я прочитал часто задаваемые вопросы и настроил расписание для того, что, как я ожидал, будет выполнено с правильным заполненным макросом execution_date
.
Я хотел бы запускать свой dag еженедельно, в четверг в 10:00 UT C , Иногда я запускаю его вручную. Насколько я понимаю, дата начала работы метки должна быть на один период позади фактической даты, когда я хочу, чтобы метка начиналась. Итак, чтобы выполнить dag сегодня, 4/9/2020, с 4/9/20020 execution_date
я устанавливаю следующие значения по умолчанию:
default_args = {
'owner': 'airflow',
'start_date': dt.datetime(2020, 4, 2),
'concurrency': 4,
'retries': 0
}
И dag определяется как:
with DAG('my_dag',
catchup=False,
default_args=default_args,
schedule_interval='0 10 * * 4',
max_active_runs=1,
concurrency=4,
) as dag:
opr_exc = BashOperator(task_id='execute_dag',bash_command='/path/to/script.sh --dt {{ ds_nodash }}')
Несмотря на то, что сегодня, 4/9, даг выполнялся вовремя, он выполнялся с ds_nodash
20200402 вместо 20200409. Я думаю, что я все еще в замешательстве, так как перехват был отключен, дата начала была одна неделя до этого я ожидал 20200409.
Теперь я нашел другой ответ здесь , который в основном объясняет, что execution_date
находится в начале периода и всегда на один период позади. Итак, в будущем я должен использовать next_ds_nodash
? Не создаст ли это проблемы для запускаемых вручную дагов, так как execution_date
работает должным образом при запуске по требованию. Или next_ds_nodash
переводится в ds_nodash
при ручном запуске?
Вопрос: Есть ли радостная среда, которая позволяет мне правильно передать макрос execution_date
в мой недельный прогон запуска при выполнении по расписанию И при запуске вручную? Какая лучшая практика здесь?