如何在Airflow中设置DAG之间的依赖关系?

时间:2016-06-24 21:23:29

标签: python etl airflow

我正在使用Airflow来安排批处理作业。我有一个每晚运行的DAG(A)和每月运行一次的另一个DAG(B)。 B取决于A已成功完成。但是B需要很长时间才能运行,因此我希望将其保存在单独的DAG中,以便更好地进行SLA报告。

如何在同一天成功运行DAG A,使DAG B运行?

3 个答案:

答案 0 :(得分:30)

您可以使用名为ExternalTask​​Sensor的运算符来实现此行为。 DAG(B)中的任务(B1)将被安排并等待DAG(A)中的任务(A2)成功

External Task Sensor documentation

答案 1 :(得分:7)

看起来也可以使用TriggerDagRunOperator,你可以使用python callable来添加一些逻辑。如下所述:https://www.linkedin.com/pulse/airflow-lesson-1-triggerdagrunoperator-siddharth-anand

答案 2 :(得分:2)

当需要跨DAG依赖性时,通常有两个要求:

    完成DAG B1上的任务B后,需要运行DAG A1上的
  1. 任务A。如其他人所提到的,可以使用ExternalTaskSensor来实现:

    B1 = ExternalTaskSensor(task_id="B1",
                            external_dag_id='A',
                            external_task_id='A1',
                            mode="reschedule")
    
  2. 当用户清除DAG A1上的任务A时,我们希望Airflow清除DAG B1上的任务B以使其重新运行。这可以使用ExternalTaskMarker(自Airflow v1.10.8起)来实现。

    A1 = ExternalTaskMarker(task_id="A1", 
                            external_dag_id="B",
                            external_task_id="B1")
    

有关更多详细信息,请参见有关跨DAG依赖关系的文档:https://airflow.apache.org/docs/stable/howto/operator/external.html