说我有两个预先存在的DAG,即A和B。在Airflow中是否有可能将所有任务从B“复制”到A,从而保留依赖项并传播B所有任务的默认参数等?最终目标是拥有一个新的DAG A',其中包含A和B的所有任务。
我知道,调和DAG级别的因素(例如,计划,并在整个复制过程中传播,但是是否有可能至少保留任务的依赖关系顺序,以使每个任务按预期运行(在预期时)—只是在另一个DAG中?
如果可能的话,最好的方法是什么?如果不支持,是否有正在进行的工作来支持这种“本机DAG组合”?
答案 0 :(得分:0)
UPDATE-1
基于对所表达问题的澄清,我推断该要求不是将DAG复制到另一个DAG中,而是将其附加到另一个DAG之后。
下面原始答案中提到的技术仍然适用(在一定程度上)
但是对于此特定用例,几乎没有其他选择
i。 使用TriggerDagRunOperator
:在第一个DAG结束时调用第二个DAG
ii。 使用SubDagOperator
:将第二个DAG包裹在一个子Dag中,并将其附加到第一个DAG的末尾
但是请结帐Wiring top-level DAGs together
线程(问题/答案和评论)以查找上述每种技术中的想法/漏洞
原始答案
我可以想到3种可能的方式
推荐的方法是转到programmatically construct your DAG。换句话说,如果可能,请遍历从外部源(例如,气流变量,数据库或JSON文件)读取的配置列表(每个任务的一个配置),并根据业务逻辑构建DAG。在这里,您只需要更改dag_id
,就可以重新使用相同的脚本来构建与原始脚本相同的DAG
对上述第一种方法的修改是通过采用诸如ajbosco/dag-factory
之类的简单想法或诸如{{3}之类的完整包装器框架来概括您的dag-construction逻辑 }
最后,如果上述方法都不能轻松地适用于您,那么您可以手动编码任务复制逻辑以重新生成与原始DAG相同的结构。您可以编写一个健壮的脚本,并在整个项目中重复使用它,以在需要时复制DAG。在这里,您将需要遍历DAG遍历以及一些传统的数据结构和算法知识。 etsy/boundary-layer
在气流DAG的任务中进行 BFS遍历