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

rob*_*hur 7 parameters templates jinja2 operator-keyword airflow

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

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
    )
Run Code Online (Sandbox Code Playgroud)

我想用execution_date(特别是分钟)动态设置任务流

但是 Jinja 模板不能使用 template_fields = ['execution_date']

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

jhn*_*lvr 5

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

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