无论DAG如何触发,如何获取Airflow之前的执行日期?

kms*_*333 3 airflow

当我手动触发DAG时,prev_execution_date和execution_date是相同的。

echo_exec_date = BashOperator(
    task_id='bash_script',
    bash_command='echo "prev_exec_date={{ prev_execution_date }} execution_date={{ execution_date }}"',
    dag=dag)
Run Code Online (Sandbox Code Playgroud)

结果是:

prev_exec_date=2022-06-29T08:50:37.506898+00:00 execution_date=2022-06-29T08:50:37.506898+00:00
Run Code Online (Sandbox Code Playgroud)

如果 DAG 由调度程序自动触发,则它们是不同的。

我希望prev_execution_date无论手动还是自动触发它。

Ela*_*lad 5

手动触发 DAG 时,计划将被忽略,prev_execution_date == next_execution_date == execution_date 这在 Airflow文档中进行了解释

这是因为手动运行的上一个/下一个没有明确定义。假设您有每日计划(例如 00:00),并且您在 13:00 调用手动运行。预计接下来的日程安排是什么?应该是每天 00:00 开始还是每天 13:00 开始?DagRun 只能有 1 个上一个和 1 个下一个。在您的情况中,您似乎对可能有超过 1 个或手动运行“位于”两个计划运行之间的情况感兴趣。这不是 Airflow 支持的东西 - 它真的让事情变得过于复杂。

如果您想解决此问题,您可以创建自定义宏来检查run_type、搜索您认为是先前的特定 DagRun 并返回它的execution_date. 请注意,它可能会产生一些副作用(重叠数据间隔过程等),您需要真正验证您实现的逻辑对于您的特定用例是否有意义。