Airflow 基于表中依赖项的动态dag创建

Airflow 基于表中依赖项的动态dag创建,airflow,Airflow,我正在从包含要执行的任务的表中读取数据,并且还将依赖项存储在同一个表中。我正在将表格读入熊猫数据框 我的任务3依赖于任务1和任务2,而任务4依赖于任务3完成 对于索引,odf.iterrows()中的行: dag_id=行[“dag_id”] 任务id=行[“任务id”] 任务名称=行[“任务名称”] 脚本名称=行[“脚本名称”] 如果行[“依赖\u ID”]不是无: dependents=行[“DEPENDENT_ID”]。拆分(“|”) 打印(家属) t1=OracleOperator(

我正在从包含要执行的任务的表中读取数据,并且还将依赖项存储在同一个表中。我正在将表格读入熊猫数据框

我的任务3依赖于任务1和任务2,而任务4依赖于任务3完成

对于索引,odf.iterrows()中的行:
dag_id=行[“dag_id”]
任务id=行[“任务id”]
任务名称=行[“任务名称”]
脚本名称=行[“脚本名称”]
如果行[“依赖\u ID”]不是无:
dependents=行[“DEPENDENT_ID”]。拆分(“|”)
打印(家属)
t1=OracleOperator(任务id=任务名称,
oracle\u conn\u id='oracle\u con',
sql='Begin%s;end;'%script\u name,dag=dag)
对于d的受抚养人:
对于索引,odf[odf[“TASK_ID”]==int(d)]中的行。iterrows():
t2=OracleOperator(任务id=行[“任务名称”],
oracle\u conn\u id='oracle\u con',
sql='开始%s;结束;'%script\u名称,dag=dag)

t1.设置上游(t2)
当处理涉及复杂依赖关系的大量任务时,我发现我通常会重复相当多的“任务样板”,如您在示例中所示

在这些情况下,我喜欢让Python在创建任务并将其连接起来时完成“繁重的工作”:

默认参数={
“oracle连接id”:“oracle连接”
}
任务指令={
“ihn_reference_raw”:{“proc”:“task1”},
“aim_代码列表_原始”:{“proc”:“task2”},
“拒绝原因\u dim\u构建”:{“proc”:“task3”,
“上游”:[“上游参考”,
“目标\代码列表\原始”]},
“拒绝原因”加载“{”过程“:“任务4”,
“上游”:[“下降原因”]}
}
...
与达格(
..., 
默认参数=默认参数
)作为dag:
#迭代细节以创建任务
对于任务id,任务目录项()中的详细信息:
OracleOperator(task_id=f“run_proc{task_id}”,
sql=f“开始{details['proc']};结束;”)
#第二次迭代以“连接”上游任务。
对于任务id,任务目录项()中的详细信息:
如果task_up:=details.get(“上游”):
dag.get_task(f“run_proc{task_id}”)。设置_上游(task_up)
(为了简洁起见,我省略了不少内容,但想法就在那里)


关键是找到流程中重复的部分,存储每个任务特有的内容(在本例中为
任务dict
),然后循环构建。

在处理涉及复杂依赖关系的大量任务时,我发现我通常会重复相当多的“任务样板”,正如您在示例中所示

在这些情况下,我喜欢让Python在创建任务并将其连接起来时完成“繁重的工作”:

默认参数={
“oracle连接id”:“oracle连接”
}
任务指令={
“ihn_reference_raw”:{“proc”:“task1”},
“aim_代码列表_原始”:{“proc”:“task2”},
“拒绝原因\u dim\u构建”:{“proc”:“task3”,
“上游”:[“上游参考”,
“目标\代码列表\原始”]},
“拒绝原因”加载“{”过程“:“任务4”,
“上游”:[“下降原因”]}
}
...
与达格(
..., 
默认参数=默认参数
)作为dag:
#迭代细节以创建任务
对于任务id,任务目录项()中的详细信息:
OracleOperator(task_id=f“run_proc{task_id}”,
sql=f“开始{details['proc']};结束;”)
#第二次迭代以“连接”上游任务。
对于任务id,任务目录项()中的详细信息:
如果task_up:=details.get(“上游”):
dag.get_task(f“run_proc{task_id}”)。设置_上游(task_up)
(为了简洁起见,我省略了不少内容,但想法就在那里)


关键是找到流程中重复的部分,存储每个任务特有的内容(在本例中为
task\u dict
),然后循环构建。

读取源以创建流程的目的是什么?目的是动态创建dag。需要执行的过程名与依赖项一起存储在表中。我所要做的就是使用表中的数据创建一个dag。气流中不能有动态过程。我还建议不要走这条路,这会使理解变得更加困难,并增加处理负载。有没有其他方法可以让我自动检索给定任务的依赖项,而不必编写50个任务并调用上游或下游??我不是动态创建DAG。而是尝试动态检索或创建依赖项。建议读取,然后读取源以创建进程的目的是什么?目的是动态创建dag。需要执行的过程名与依赖项一起存储在表中。我所要做的就是使用表中的数据创建一个dag。气流中不能有动态过程。我还建议不要走这条路,这会使理解变得更加困难,并增加处理负载。有没有其他方法可以让我自动检索给定任务的依赖项,而不必编写50个任务并调用上游或下游??我不是动态创建DAG。相反,我正在尝试动态检索或创建依赖项。建议阅读,然后谢谢。我试着根据你的想法创建一个示例,尽管我经常遇到一个错误“aiffort.exceptions.aifflowexceptioin:只能在操作符之间设置关系;received str”。