Airflow 支持手动和计划执行

Airflow 支持手动和计划执行,airflow,airflow-scheduler,Airflow,Airflow Scheduler,我的组织已经使用了一段时间的DAG,它只在手动触发器上运行。dag与之交互的任何外部资源都由执行日期{ds_nodash}参数化 我们最近将此dag转换为按每周计划运行,我发现airflow“调度器在其计划周期结束时触发dag运行,而不是在其开始时”。我一点也没想到会这样。我不想讨论airflow的调度程序设计,而是想了解一些关于如何编写DAG的建议,这些DAG既可以通过手动触发也可以通过预定的时间间隔工作 以下是我的具体困境: 为了避免调度程序使用周期的开始,我可以使用{{next_ds_no

我的组织已经使用了一段时间的DAG,它只在手动触发器上运行。dag与之交互的任何外部资源都由执行日期{ds_nodash}参数化

我们最近将此dag转换为按每周计划运行,我发现airflow“调度器在其计划周期结束时触发dag运行,而不是在其开始时”。我一点也没想到会这样。我不想讨论airflow的调度程序设计,而是想了解一些关于如何编写DAG的建议,这些DAG既可以通过手动触发也可以通过预定的时间间隔工作

以下是我的具体困境:

  • 为了避免调度程序使用周期的开始,我可以使用{{next_ds_nodash}},但是手动触发的dag将永远不会由它自己的执行日期参数化
  • 手动触发时,我们希望查看过去7天内的另一个文件:{{execution_date-macros.timedelta(days=7)).strftime(“%Y%m%d”)}。当计划触发时,这看起来已经过去14天了。我怎样才能做到这两个呢

  • 我不是在寻找解决我的困境的直接方法,而是想知道我打算让DAG按计划手动运行是否真的很不寻常?如果没有,我的困境的具体解决方案是什么,或者编写DAG的一些最佳实践是什么,您可以手动触发和安排DAG

    每当我需要按照计划运行DAG时,我总是。。。创建了两个DAG

    我认为这实际上是气流本身的官方建议。只需制作两个DAG,并设置一个具有每周计划的DAG,如
    schedule\u interval='0 5**1'#每周一5:00
    ,另一个具有
    schedule\u interval=None
    。给他们一些ID,比如
    my\u awesome\u dag
    my\u awesome\u dag\u manual


    使用此设置,您可以四处玩,并确保它始终查看与执行日期相关的文件。然后,您可以在GUI中同时启用这两个
    ,虽然每周一个将确实每周触发,但另一个将仅在您按下播放按钮时触发。

    如果有人推荐,请提供文档链接。这将有助于其他人确定答案。