了解 Airflow 的 execution_date 和时间表

Understanding Airflow's execution_date and schedule

来自 cron 的气流的新手,试图了解 execution_date 宏如何应用于调度系统以及何时手动触发。我已经阅读了常见问题解答,并根据我预期的时间表设置了填充正确 execution_date 宏的执行计划。

我想 运行 每周四上午 10 点 UTC。偶尔我会 运行 手动。我的理解是 dag 的开始日期应该比我希望 dag 开始的实际日期晚一个时期。因此,为了今天在 2020 年 4 月 9 日以 4/9/20020 execution_date 执行 dag,我设置了以下默认值:

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 }}')

虽然 dag 在今天 4 月 9 日准时执行,但它执行的 ds_nodash 为 20200402 而不是 20200409。我想我仍然很困惑,因为赶上已关闭,开始日期是一周前因此我期待 20200409。

现在,我找到了另一个答案 ,这基本上解释了 execution_date 处于周期的开始,并且总是落后一个周期。那么今后我应该使用 next_ds_nodash 吗?这不会为手动触发的 dag 造成问题,因为 execution_date 在按需 运行 时按预期工作。或者 next_ds_nodash 是否在手动触发时转换为 ds_nodash

问题:当 运行ning 计划并且什么时候手动触发?这里的最佳做法是什么?

经过更多的研究和测试,当手动触发 dag 时,next_ds_nodash 确实等同于 ds_nodash

因此,如果您遇到类似情况,请执行以下操作以正确安排您的每周 运行 工作(可选择手动触发)

  1. start_date 设置在您实际想要开始的日期前一周
  2. 相应地配置 schedule_interval 以便 运行 作业
  3. 在您希望获得作业 运行 时的预期当前执行日期的任何地方使用 next 执行日期宏。

这对我有用,但我不必处理任何 catchup/backfill 选项,所以 YMMV。