Airflow 带有配置/参数json的气流DAG,并循环到该参数以生成运算符
我有一个手动触发的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 我见过动态创建的任务的示例,但它们并不是真正的动态任务,因为列表值是硬编
{“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 raiseairflowskipeexception
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,您可以简单地绕过任务执行,这将简化答案。最大大小是固定的。