Airflow 是否有可能(也是一个好主意)根据数据库的结果动态创建气流DAG?

Airflow 是否有可能(也是一个好主意)根据数据库的结果动态创建气流DAG?,airflow,Airflow,我知道以前有人问过这个问题,但我想说得非常简单。我正在使用天文学家运行气流v1.10.10。每天运行的每个dag可能有不同数量的任务。此任务数将由给定dag运行(即当天)的数据库表中的行数定义 我将在dag文件中运行查询并创建如下列表: list=client.querySELECT*从日期为{{ds}的表中选择 然后,我将根据列表的大小创建任务: for i in range(1, len(list)): sample_airflow_operator(name=i + '_opera

我知道以前有人问过这个问题,但我想说得非常简单。我正在使用天文学家运行气流v1.10.10。每天运行的每个dag可能有不同数量的任务。此任务数将由给定dag运行(即当天)的数据库表中的行数定义

我将在dag文件中运行查询并创建如下列表:

list=client.querySELECT*从日期为{{ds}的表中选择

然后,我将根据列表的大小创建任务:

for i in range(1, len(list)):
    sample_airflow_operator(name=i + '_operator') >> sample_airflow_operator(name=(i+1) + '_operator') 
等等。我意识到这是一个粗糙的例子,不包括I=0或I=lenlist,但我并不担心这一点


如果我们将此dag定义为每日,是否每天都会成功创建dag,根据我上面提到的查询结果,每天会有不同数量的任务?是否可以在每次dag运行之前执行列表查询?在保持dag开启且免维护的情况下,这是否可行?

因为您不是在创建dag,而是在dag内创建任务,简单的回答是这将起作用

据我所知,这不是一种常见的做法,但有一些已知的缺点,我认为对于非常特殊的用例这样做是有意义的

但是要记住的事情很少

对于任何动态生成的任务,不要将depend_on_pass或wait_for_down用作True。具有这些设置的任务将检查以前的执行情况,如果没有以前的执行情况,它们将不会运行

DAG UI树模式将仅显示基于最新执行的任务

DAG UI图形模式将根据执行DAG时DAG中存在的内容显示任务。但是,我不确定您是否能够重新运行当前DAG中不存在的旧taks。所以这是一种妥协


这很有道理,我将把depen_on_pass应用到以前的任务中,该任务每次都是静态的。UI注释也有意义。非常感谢你。很高兴听到你这么说。你能把这个答案标记为“已接受”吗?我只是在等着看是否还有其他输入。再次感谢。