气流动态创建

时间:2019-10-08 15:44:50

标签: airflow

有人请告诉我,气流中的DAG是否只是一个图(如占位符),而没有与之关联的任何实际数据(如自变量),还是DAG像实例(针对固定参数)?

我想要一个系统,其中要执行的一组操作(给定一组参数)是固定的。但是,每次运行该组操作时,此输入都会有所不同。简单来说,管道是相同的,但是每次运行时管道的参数都会不同。

我想知道如何在气流中进行配置?是否应该为每个新的参数集创建一个新的DAG?或其他任何方法?

在我的情况下,图形是相同的,但是要在它们来时对不同数据(来自不同用户)运行它。那么,我是否应该每次都为新数据创建一个新的DAG?

3 个答案:

答案 0 :(得分:0)

是的,您是正确的; DAG基本上是一种单向图。您可以通过将多个operators链接在一起以形成“结构”来一次创建DAG。

然后,每个运算符可以接受多个参数,这些参数可以从DAG定义文件本身传递(如果需要)。

或者您可以将配置对象传递到DAG,并使用context从那里访问自定义数据。

我建议阅读气流文档以获取更多示例:https://airflow.apache.org/concepts.html#tasks

答案 1 :(得分:0)

您可以将Airflow DAG视为由其他程序组成的程序,但它不能包含循环(非循环)。每次输入数据更改时,您都会更改程序吗?当然,这完全取决于您的程序编写方式,但是通常您希望对程序进行概括,对吗?您不希望两个不同的程序执行2 + 2和3 + 3。但是您将拥有不同的程序来显示Facebook页面和玩Pokemon Go。如果要对相似的数据执行相同的操作,则只想编写一次DAG,并且可能只更改环境参数(数据库连接,日期等)-Airflow非常适合这样做。

答案 2 :(得分:0)

如果图形的结构相同,则不必每次都创建一个新的DAG。

气流DAG是通过代码创建的,因此您可以自由创建一个代码结构,该结构允许您每次传递参数。如何做到这一点将需要一些创造性的思考。

例如,您可以创建一个接受参数的Web表单,将其存储在数据库中,然后使用Airflow restAPI调度DAG。然后需要编写DAG代码以从数据库中检索参数。

还有其他几种方法可以满足您的要求,它们都取决于您的用例。 请注意,如果您更改了DAG的开始日期,则Airflow计划程序的性能将不佳。对于上述想法,您需要将开始日期设置为比首次运行DAG早,然后将计划间隔设置为关闭。这样,您的开始日期就不会改变,并且会动态触发DAG运行。