当我手动触发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无论手动还是自动触发它。
手动触发 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. 请注意,它可能会产生一些副作用(重叠数据间隔过程等),您需要真正验证您实现的逻辑对于您的特定用例是否有意义。
| 归档时间: |
|
| 查看次数: |
2336 次 |
| 最近记录: |