Airflow 气流动态dag创建

Airflow 气流动态dag创建,airflow,Airflow,请告诉我气流中的DAG是否只是一个没有任何实际数据(如参数)的图形(如占位符),或者DAG是否像一个实例(用于固定参数) 我想要一个系统,其中要执行的操作集(给定一组参数)是固定的。但每次运行操作集时,该输入都会不同。简单地说,管道是相同的,但是管道的参数在每次运行时都会不同 我想知道如何在气流中配置此功能?我应该为每一组新参数创建一个新的DAG吗?还是其他方法 在我的例子中,该图是相同的,但希望在不同的数据(来自不同的用户)上运行它。那么,我是否应该每次为新数据创建一个新的DAG?是的,你是对

请告诉我气流中的DAG是否只是一个没有任何实际数据(如参数)的图形(如占位符),或者DAG是否像一个实例(用于固定参数)

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

我想知道如何在气流中配置此功能?我应该为每一组新参数创建一个新的DAG吗?还是其他方法


在我的例子中,该图是相同的,但希望在不同的数据(来自不同的用户)上运行它。那么,我是否应该每次为新数据创建一个新的DAG?

是的,你是对的;DAG基本上是一种单向图。您可以通过将多个
操作符链接在一起形成“结构”,一次性创建DAG

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

或者,您可以将配置对象传递到DAG,并使用
上下文
从DAG访问自定义数据


我建议阅读气流文档以了解更多示例:

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

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

或者,您可以将配置对象传递到DAG,并使用
上下文
从DAG访问自定义数据


我建议阅读Airflow文档了解更多示例:

您可以将Airflow DAG视为由其他程序组成的程序,但不能包含循环(非循环)。每次输入数据更改时,您是否会更改程序?当然,这一切都取决于你如何编写你的程序,但通常你希望你的程序是通用的,对吗?您不希望两个不同的程序执行2+2和3+3。但是你会有不同的程序来显示Facebook页面和玩口袋妖怪围棋。如果您想对类似的数据执行相同的操作,那么您需要编写一次DAG,并且可能只更改环境参数(DB连接、日期等)——Airflow非常适合这样做

您可以将Airflow DAG视为由其他程序组成的程序,但它不能包含循环(非循环)。每次输入数据更改时,您是否会更改程序?当然,这一切都取决于你如何编写你的程序,但通常你希望你的程序是通用的,对吗?您不希望两个不同的程序执行2+2和3+3。但是你会有不同的程序来显示Facebook页面和玩口袋妖怪围棋。如果您想对类似的数据执行相同的操作,那么您需要编写一次DAG,并且可能只更改环境参数(DB连接、日期等)——Airflow非常适合这样做

如果图形的结构相同,则无需每次都创建新的DAG

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

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

还有其他几种方法可以实现您的要求,它们都取决于您的用例。
需要注意的是,如果更改DAG的开始日期,气流计划程序将无法正常运行。对于上述想法,您需要将开始日期设置为早于第一次DAG运行,然后将计划间隔设置为off。这样,您就有了一个不会更改的开始日期,并动态触发DAG运行

如果图形的结构相同,则无需每次都创建新的DAG

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

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

还有其他几种方法可以实现您的要求,它们都取决于您的用例。
需要注意的是,如果更改DAG的开始日期,气流计划程序将无法正常运行。对于上述想法,您需要将开始日期设置为早于第一次DAG运行,然后将计划间隔设置为off。这样,您就有了一个不会更改的开始日期,并动态触发DAG运行

阅读
EDIT-1
-部分并阅读
EDIT-1
-部分,我的要求是这些dag运行(通用dag图+特定用户输入)必须根据用户输入安排在不同的时间。在这种情况下,我需要为每个输入创建新的DAG,对吗?抱歉..但我是气流新手。我的要求是这些dag运行(通用dag图+特定用户输入)必须根据用户输入安排在不同的时间。在这种情况下,我需要为每个输入创建新的DAG,对吗?抱歉..但我是气流新手。如果DAG只是一个占位符图形(没有指定任何参数),我们可以创建一个包装器(名为DagInstance),它接受参数并创建DAG,这会更好吗?这个模型让事情变得直观,我觉得…现在dag不是一个通用的图形..它是一个工作流定义的参数已经固定。。这有意义吗?如果DAG只是一个占位符图(没有指定任何参数),我们可以创建一个