Python 如何设置气流中DAG之间的依赖关系?

Python 如何设置气流中DAG之间的依赖关系?,python,etl,airflow,Python,Etl,Airflow,我正在使用计划批处理作业。我有一个DAG(A)每晚运行,另一个DAG(B)每月运行一次。B取决于A是否已成功完成。但是,B需要很长时间才能运行,因此我希望将其保存在单独的DAG中,以便更好地报告SLA 如何使DAG B的运行依赖于DAG a在同一天的成功运行?您可以使用名为ExternalTaskSensor的操作符实现此行为。 DAG(B)中的任务(B1)将被安排,并等待DAG(a)中的任务(A2)成功 它看起来也可以使用,您可以使用可调用的python来添加一些逻辑。如本文所述:当需要跨DA

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


如何使DAG B的运行依赖于DAG a在同一天的成功运行?

您可以使用名为ExternalTaskSensor的操作符实现此行为。 DAG(B)中的任务(B1)将被安排,并等待DAG(a)中的任务(A2)成功


它看起来也可以使用,您可以使用可调用的python来添加一些逻辑。如本文所述:

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

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

    B1 = ExternalTaskSensor(task_id="B1",
                            external_dag_id='A',
                            external_task_id='A1',
                            mode="reschedule")
    
  • 当用户在DAG
    A
    上清除任务
    A1
    时,我们希望在DAG
    B
    上清除任务
    B1
    ,让它重新运行。这可以使用
    ExternalTaskMarker
    (从Airflow v1.10.8开始)实现


  • 有关更多详细信息,请参阅关于跨DAG依赖关系的文档:

    但我们将无法可视化依赖关系,对吗?@nono是的。你不会的。这是推荐的方法吗?我有一个每天的任务,需要等待DagA(包括5个任务)和DagB(5个单独的任务)。我的DagC应该等待这两个都成功,然后从数据库中查询两个表,聚合并联接它们,然后发送一些电子邮件/文件。@不,我想您可以编写一些东西来解析所有dag定义文件,找到ExternalTaskSensor dag引用并生成网络图。当使用上行/下行函数(和位移位快捷方式)将DAG加载到调度程序中时,必须发生类似的情况。这将稍微复杂一些,因为您需要查看所有dag定义。这是个好主意,绝对可行。我想另一种方法——使用较少的DAG和许多子DAG——就是这种功能的重点。是的,triggerDagRunOp可以用来处理DAG之间的依赖关系,但是,当有更多相互依赖的DAG时,这个过程是很棘手的。气流中似乎缺少此功能。你知道开发人员是否打算朝这个方向做吗?@ozw1z5rd我建议你去:或询问gitter或thea airflow邮件列表。不幸的是,
    ExternalTaskMarker
    目前在airflow 2.0.1中由于
    A1 = ExternalTaskMarker(task_id="A1", 
                            external_dag_id="B",
                            external_task_id="B1")