Airflow 根据数据库中sql查询的结果创建动态任务

Airflow 根据数据库中sql查询的结果创建动态任务,airflow,pipeline,orchestration,airflow-2.x,Airflow,Pipeline,Orchestration,Airflow 2.x,我试图创建动态任务,任务组将结果保存在变量中。变量每N分钟修改一次,具体取决于数据库查询,但当第二次修改变量时,调度程序会崩溃 基本上,我需要根据查询中接收到的唯一行数创建任务 任务组(f“任务”)作为任务: 有没有办法用taskgroup来实现这一点?这是一种反气流模式 虽然可以在顶层代码中使用Variable.get(“df”),但不应该这样做。变量/连接/使用任何数据库创建查询的任何其他代码只能在operators范围内或使用Jinja模板进行。原因是,如果不更改默认的min\u file

我试图创建动态任务,任务组将结果保存在变量中。变量每N分钟修改一次,具体取决于数据库查询,但当第二次修改变量时,调度程序会崩溃

基本上,我需要根据查询中接收到的唯一行数创建任务

任务组(f“任务”)作为任务:


有没有办法用taskgroup来实现这一点?

这是一种反气流模式

虽然可以在顶层代码中使用
Variable.get(“df”)
,但不应该这样做。变量/连接/使用任何数据库创建查询的任何其他代码只能在operators范围内或使用Jinja模板进行。原因是,如果不更改默认的
min\u file\u process\u interval
,将定期(每30秒)解析DAG文件,因此每30秒与数据库交互的代码将导致该数据库负载过大。 对于其中一些情况,在未来的气流版本中将出现警告(请参阅)


气流任务应尽可能静态(或缓慢变化)。

是的,我明白了,这只是一个可能的解决方案(不起作用)来动态生成任务。任务组提供xcom或default_参数来实现这一点似乎很理想,但似乎还不可能:还有其他解决方案吗?您对此有什么建议吗?这仍然是一种反模式。气流的设计目的不是基于仅在运行时已知的数据创建任务。
    data_variable = Variable.get("df")
    data = data_variable

    try :
        if data != False and data !='none':
            df = pd.read_json(data)

            for field_id in df.field.unique():
             

                task1 = PythonOperator(
                   
                )
                task2 = PythonOperator(
                   
                )

               
                task1 >> task2

    except:
        pass