将任务从一个DAG复制到另一个DAG的最佳方法?

时间:2019-08-15 17:26:35

标签: airflow

说我有两个预先存在的DAG,即A和B。在Airflow中是否有可能将所有任务从B“复制”到A,从而保留依赖项并传播B所有任务的默认参数等?最终目标是拥有一个新的DAG A',其中包含A和B的所有任务。

我知道,调和DAG级别的因素(例如,计划,并在整个复制过程中传播,但是是否有可能至少保留任务的依赖关系顺序,以使每个任务按预期运行(在预期时)—只是在另一个DAG中?

如果可能的话,最好的方法是什么?如果不支持,是否有正在进行的工作来支持这种“本机DAG组合”?

1 个答案:

答案 0 :(得分:0)

UPDATE-1

基于对所表达问题的澄清,我推断该要求不是将DAG复制到另一个DAG中,而是将其附加到另一个DAG之后。

  1. 下面原始答案中提到的技术仍然适用(在一定程度上)

  2. 但是对于此特定用例,几乎没有其他选择

    i。 使用TriggerDagRunOperator :在第一个DAG结束时调用第二个DAG

    ii。 使用SubDagOperator :将第二个DAG包裹在一个子Dag中,并将其附加到第一个DAG的末尾

    但是请结帐Wiring top-level DAGs together线程(问题/答案和评论)以查找上述每种技术中的想法/漏洞


原始答案

我可以想到3种可能的方式

  1. 推荐的方法是转到programmatically construct your DAG。换句话说,如果可能,请遍历从外部源(例如,气流变量,数据库或JSON文件)读取的配置列表(每个任务的一个配置),并根据业务逻辑构建DAG。在这里,您只需要更改dag_id ,就可以重新使用相同的脚本来构建与原始脚本相同的DAG

  2. 对上述第一种方法的修改是通过采用诸如ajbosco/dag-factory之类的简单想法或诸如{{3}之类的完整包装器框架来概括您的dag-construction逻辑 }

  3. 最后,如果上述方法都不能轻松地适用于您,那么您可以手动编码任务复制逻辑以重新生成与原始DAG相同的结构。您可以编写一个健壮的脚本,并在整个项目中重复使用它,以在需要时复制DAG。在这里,您将需要遍历DAG遍历以及一些传统的数据结构和算法知识。 etsy/boundary-layer在气流DAG的任务中进行 BFS遍历