Airflow 基于DB返回值动态添加气流任务

Airflow 基于DB返回值动态添加气流任务,airflow,Airflow,我想从数据库中获取值,并为每个值并行运行任务。DB可以在每次调用中返回附加值/更少值 def values_from_db(): # fetch data from DB. sample value - ["val1", "val2", "val3"] return values for val in values_from_db(): task1(val) >> task2(val) 将

我想从数据库中获取值,并为每个值并行运行任务。DB可以在每次调用中返回附加值/更少值

def values_from_db():
     # fetch data from DB. sample value - ["val1", "val2", "val3"]
     return values

for val in values_from_db():
     task1(val) >> task2(val)

将多次调用来自\u db的
值\u
方法以捕获DAG文件中的更改


有没有更好的方法来处理这个问题?比如在第一个任务中从_db调用
值,然后在此基础上动态添加任务?

Dev,这似乎是一个合理的方法。只要这些值保持相对静态,并且DAG配置合理地考虑了潜在的变化

我知道项目中有很多用例,其中任务/DAG的配置是在yaml或类似项目中提供的。从概念上讲,你的建议并没有太大的不同

请注意,您的方法存在一些间接费用。首先,调度程序将在每次心跳时调用数据库调用。如果在DAG处于运行状态时,值在数量上发生变化或任何变化,则可能会出现问题


我可能鼓励的另一种选择是,将返回的值分组,并将它们均匀地分布到下面的任务中。这样,您就有了一个针对前10%的值等的任务,这将节省许多问题,这些问题可能是由于数据库端的“更改”而引起的。

在我的解决方案中,调度程序调用的许多数据库调用似乎有些过分。如果我将此作为第一步运行并在xcom中推送其返回值,我想知道是否可以在主DAG文件中以某种方式访问该值。