Python 如何设置气流中DAG之间的依赖关系?
我正在使用计划批处理作业。我有一个DAG(A)每晚运行,另一个DAG(B)每月运行一次。B取决于A是否已成功完成。但是,B需要很长时间才能运行,因此我希望将其保存在单独的DAG中,以便更好地报告SLAPython 如何设置气流中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 B的运行依赖于DAG a在同一天的成功运行?您可以使用名为ExternalTaskSensor的操作符实现此行为。 DAG(B)中的任务(B1)将被安排,并等待DAG(a)中的任务(A2)成功
它看起来也可以使用,您可以使用可调用的python来添加一些逻辑。如本文所述:当需要跨DAG依赖时,通常有两个要求:
B上的任务B1
需要在DAGA上的任务A1
完成后运行。这可以通过使用ExternalTaskSensor
来实现,正如其他人所提到的:
B1 = ExternalTaskSensor(task_id="B1",
external_dag_id='A',
external_task_id='A1',
mode="reschedule")
A
上清除任务A1
时,我们希望在DAGB
上清除任务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")