如何在 dag 中获得 execution_date?运营商的外部?

How can I get execution_date in dag?? the outside of operator?

如何在 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 本身中)获取执行参数???

尝试在 execution_min = "{{ execution_date }}" 之后使用 strftime,确保双括号前后都有 space。

更新:如果您在 Operator 之外使用它,它将不起作用,您可以传递一个 kwargs 然后使用它。

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

此外,无法在 运行 时间将 add/subtract 任务发送给 DAG 运行。您可以拥有动态 dag,其结构在 运行 之前就已确定(即,将文件解析为 DAG 结构),但您无法添加任务或在 运行 期间决定 DAG 的外观.