【问题标题】:How can I get execution_date in dag?? the outside of operator?如何在 dag 中获取 execution_date?运营商的外部?
【发布时间】:2018-03-30 05:31:56
【问题描述】:

如何在 dag 外部获取 execution_date 参数?

execution_min = "{{execution_date.strftime('%M') }}"

if execution_min == '00':
    logging.info('**** ' + "YES, It's 00")
    final_task = DummyOperator(
        task_id='task_y00',
        ...
        dag=dag
    )
else:
    logging.info('**** ' + "NOPE!!!")
    final_task = DummyOperator(
        task_id='task_n00',
        ...
        dag=dag
    )

我想用execution_date(尤其是分钟)动态设置一个任务流

但 Jinja 模板不适用于 template_fields = ['execution_date']

是否有任何解决方案可以从运算符外部(= 在 DAG 本身中)获取执行参数???

【问题讨论】:

    标签: templates parameters jinja2 operator-keyword airflow


    【解决方案1】:

    执行日期特定于 DagRun。 DagRun 信息在 DAG 定义文件中不可用(它在 Operator 的模板字段中可用,因为这些在运行时通过 Jinja 进行解析)。即使 dag 没有运行,调度程序、网络服务器和工作人员也会经常解析 DAG 定义文件。这就是为什么在实际的 DagRun 之外无法访问执行日期等信息的原因。

    此外,无法在运行时向 DAG 运行添加/减去任务。您可以拥有在运行之前确定其结构的动态 dag(即将文件解析为 DAG 结构),但您无法添加任务或决定 DAG 在运行时的外观。

    【讨论】:

      【解决方案2】:

      尝试只使用execution_min = "{{ execution_date }}",然后使用strftime,确保双括号前后有空格。

      更新:如果你在Operator 之外使用它,它不会工作,你可以传入一个 kwargs 然后使用它。 Airflow: pass {{ ds }} as param to PostgresOperator

      【讨论】:

      • 它也不起作用...而且...{{execution_date.strftime('%M') }}这种神社模板也适用于操作员
      猜你喜欢
      • 1970-01-01
      • 2018-08-17
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多