气流:即使跨依赖DAG尚未完成,也触发DAG运行

时间:2020-09-02 16:16:32

标签: airflow

我正在使用Airflow documentation设置交叉依赖的DAGS。我有一个特定的用例,其中DAG B要求DAG A首先运行-但是,如果DAG A延迟了很长时间,则DAG B仍应运行。因此,我实质上是在寻找在2个传感器之间进行“或”运算的方式。

说DAG B需要每天下午5点运行,这就是我在代码中要这样做的方式:

while True:
    CURRENT_TIME = getCurrentTime()

    if DAG A completed OR CURRENT_TIME > 5pm:
       run DAG B

这在代码中要简单得多,但是看不到Airflow是如何完成的。

1 个答案:

答案 0 :(得分:0)

有趣的问题,这就是我认为可以实现的方式

  1. ExternalTaskSensor指南中所述,您需要在DAG-B的开始处放置一个Cross-DAG Dependencies,以推迟DAG-B的执行,直到DAG-A完成。 / p>

    • 在这里您还必须设置timeout param,以使传感器在一定的最大时间后失效。
  2. 然后在DAG-B的第一个 actual 任务中(紧接ExternalTaskSensor之后)将trigge_rule=TriggerRule.ALL_DONE设置为确保您的DAG-无论DAG-A是否在规定的时间内完成,B都会启动;换句话说

      DAG-B的
    • 执行将推迟到DAG-A完成之前,但最多持续delta
      • 如果DAG-A在此时间内完成,则DAG-B将在此之后立即开始执行
      • 但是,如果DAG-A在此持续时间内未能完成,则DAG-B将在此持续时间过去后开始执行。