支持手动和定时执行
Supporting manual and scheduled execution
我的组织一直在使用仅 运行 手动触发的 DAG 已有一段时间了。 dag 与之交互的任何外部资源都由执行日期 {{ ds_nodash }} 参数化。
我们最近将这个 dag 按每周计划转换为 运行,我发现气流 "scheduler triggers a DAG run at the end of its schedule period, rather than at the beginning of it"。我根本没想到会这样。我不是要讨论气流的调度器设计,而是寻找一些关于如何编写既可以通过手动触发又可以通过预定间隔工作的 DAG 的建议。
这是我的具体困境:
- 为了解决调度程序使用周期开始的事实,我可以使用 {{ next_ds_nodash }},但是手动触发的 dag 永远不会被其自己的执行日期参数化
- 当手动触发时,我们想查看过去 7 天的另一个文件:{{ execution_date - macros.timedelta(days=7)).strftime("%Y%m%d “)}}。当计划触发时,现在看起来是过去 14 天。我怎样才能做到这两点?
我不是在寻找解决我困境的直接方法,而是想知道我按计划和手动安排 DAG 运行 的意图是否真的很不寻常?如果不是,我的困境的具体解决方案是什么,或者编写您可以手动触发和安排的 DAG 的一些最佳实践。
每次我需要按计划 和 偶尔以手动方式 运行 DAG 时,我总是... 创建 两个DAG!
我觉得这其实是Airflow自己的官方推荐。只需制作两个 DAG,并设置一个每周时间表,如 schedule_interval = '0 5 * * 1' # Every Monday at 5:00
和一个 schedule_interval = None
。给他们 ID,例如 my_awesome_dag
和 my_awesome_dag_manual
。
使用此设置,您可以尝试并确保它始终查看与该 execution_date
相关的文件。然后,您可以将它们 ON
都保留在 GUI 中,虽然每周一次确实会每周触发一次,但另一个只会在您按下播放按钮时触发。
我的组织一直在使用仅 运行 手动触发的 DAG 已有一段时间了。 dag 与之交互的任何外部资源都由执行日期 {{ ds_nodash }} 参数化。
我们最近将这个 dag 按每周计划转换为 运行,我发现气流 "scheduler triggers a DAG run at the end of its schedule period, rather than at the beginning of it"。我根本没想到会这样。我不是要讨论气流的调度器设计,而是寻找一些关于如何编写既可以通过手动触发又可以通过预定间隔工作的 DAG 的建议。
这是我的具体困境:
- 为了解决调度程序使用周期开始的事实,我可以使用 {{ next_ds_nodash }},但是手动触发的 dag 永远不会被其自己的执行日期参数化
- 当手动触发时,我们想查看过去 7 天的另一个文件:{{ execution_date - macros.timedelta(days=7)).strftime("%Y%m%d “)}}。当计划触发时,现在看起来是过去 14 天。我怎样才能做到这两点?
我不是在寻找解决我困境的直接方法,而是想知道我按计划和手动安排 DAG 运行 的意图是否真的很不寻常?如果不是,我的困境的具体解决方案是什么,或者编写您可以手动触发和安排的 DAG 的一些最佳实践。
每次我需要按计划 和 偶尔以手动方式 运行 DAG 时,我总是... 创建 两个DAG!
我觉得这其实是Airflow自己的官方推荐。只需制作两个 DAG,并设置一个每周时间表,如 schedule_interval = '0 5 * * 1' # Every Monday at 5:00
和一个 schedule_interval = None
。给他们 ID,例如 my_awesome_dag
和 my_awesome_dag_manual
。
使用此设置,您可以尝试并确保它始终查看与该 execution_date
相关的文件。然后,您可以将它们 ON
都保留在 GUI 中,虽然每周一次确实会每周触发一次,但另一个只会在您按下播放按钮时触发。