Airflow 带有配置/参数json的气流DAG,并循环到该参数以生成运算符

Airflow 带有配置/参数json的气流DAG,并循环到该参数以生成运算符,airflow,apache-airflow-xcom,Airflow,Apache Airflow Xcom,我有一个手动触发的dag。它采用如下参数: {“id_列表”:“3,5,1”} 在DAG中,我根据以下整数列表动态创建运算符: for id in id_list: task = create_task(id) 我需要根据id\u list的参数值初始化id\u list。 如果不在模板字段中,则无法直接引用该参数,如何初始化该列表?这就是我希望在图形视图中看到它的方式,其中流程任务基于id\u列表params 我见过动态创建的任务的示例,但它们并不是真正的动态任务,因为列表值是硬编

我有一个手动触发的dag。它采用如下参数:

{“id_列表”:“3,5,1”}

在DAG中,我根据以下整数列表动态创建运算符:

for id in id_list:
   task = create_task(id)

我需要根据
id\u list
的参数值初始化
id\u list
。 如果不在模板字段中,则无法直接引用该参数,如何初始化该列表?这就是我希望在图形视图中看到它的方式,其中流程任务基于
id\u列表
params


我见过动态创建的任务的示例,但它们并不是真正的动态任务,因为列表值是硬编码的。如果有意义,任务将根据硬代码值列表动态创建。

A
DAG
,其任务必须在可用之前解决;这包括Web服务器、调度器和所有地方。Web服务器实际上是一个很好的例子,为什么:如何向用户呈现流程


流程的唯一动态组件是模板渲染期间可用的参数。在大多数情况下,我看到人们使用
PythonOperator
循环输入并执行一些操作
N
次来解决同一问题。

首先,创建固定数量的任务来执行。这个例子使用的是PythonOperator。在
python_callable
中,如果
索引
小于
param_列表的长度
,则执行else raise
airflowskipeexception

        def execute(index, account_ids):
            param_list = account_ids.split(',')
            if index < len(param_list):
                print(f"execute task index {index}")
            else:
                raise AirflowSkipException


        def create_task(task_id, index):
            return PythonOperator(task_id=task_id,
                                  python_callable=execute,
                                  op_kwargs={
                                      "index": index,
                                      "account_ids": "{{ dag_run.conf['account_ids'] }}"}
                                  )

        record_size_limit = 5
        ACCOUNT_LIST = [None] * record_size_limit

        for idx in range(record_size_limit):
            task = create_task(f"task_{idx}", idx)
            task

def execute(索引、帐户ID):
参数列表=帐户ID.split(',')
如果索引
触发DAG并将其作为参数传递:

图形视图:


我不太明白你的问题。你能澄清一下吗?您想要达到的结果到底是什么?ID是否被限制在某个特定的数量,或者它们的数量可以无限增长?例如,如果只有10个可能的ID,您可以简单地绕过任务执行,这将简化答案。最大大小是固定的。