专项说明:参数优先级
整体说明
离线开发的任务中包含节点,节点支持配置参数组,也支持设置“输入参数”。任务开发模式选中节点运行时,也可配置输入参数。此外,任务支持配置参数组,使用参数组中的参数。任务调度设置中,也支持设置参数。另外,如果使用了嵌套流节点,还会有嵌套流参数等。本小结对上述提到的参数的优先级进行说明。
参数的优先级为:节点“输入参数”中的参数>节点“参数组引用”内的参数>任务“运行设置“/“调度设置”的自定义参数>任务引用的参数组”内的参数
任务开发模式运行
案例:一个任务引用了一个参数组,其中变量str1=c。任务中包含一个SQL节点,节点引用了一个参数组,其中变量str1=d,节点代码为“select '${str1};'”,同时节点设置了输入参数,str1=a。开发模式选中该节点运行,在运行设置中设置了str1=b。
结果:SQL实际运行的是“select 'a'”。
说明:这里参数的优先级为节点“输入参数”中的参数优先级最高,节点“参数组引用”内的参数其次,再则是运行时设置的参数,参数组的优先级最低。
任务调度运行
案例:一个任务引用了一个参数组,其中变量str1=c。任务中包含一个SQL节点,节点引用了一个参数组,其中变量str1=d,节点代码为“select '${str1};'”,同时节点设置了输入参数,str1=a。调度设置中,设置了str1=b。
结果:SQL实际运行的是“select 'a'”。
说明:这里参数的优先级为节点“输入参数”中的参数优先级最高,节点“参数组引用”内的参数其次,再则是调度设置的参数,参数组的优先级最低。
任务开发模式运行嵌套流节点
表示当前嵌套流节点,除了需要将下方的“嵌套流参数”传递给所引用的任务之外,还需要将哪些参数传递进去。目前支持将“引用参数组的参数”(包括“任务引用的参数组”和“参数组引用”)传递进去。此处参数的优先级为:引用参数组的参数(任务引用的)<引用参数组的参数(本节点引用的)<当前节点配置的嵌套流参数。参数按优先级合并成参数集合后,会传递给被引用的任务,该参数集合的参数优先级,在被引用的任务中有最高的优先级。
嵌套流节点支持循环执行,并设置“循环参数”,开发模式运行时,会按照如下优先级生成循环参数的参数取值:循环参数中的参数固定值>输入参数>开发模式运行设置的参数。
比如下方节点的设置,str1=1,str2=${str22},str2=${str33},并设置了输入参数,str22=2,开发模式运行时,设置str22=0,str33=3,则循环参数最终的取值为:str1=1,str2=2,str3=3。
嵌套流节点的“循环参数”,当前节点“引用参数组的参数”,当前任务“引用参数组的参数”,设置的“嵌套流参数”,会按照“循环参数”>“嵌套流参数”>节点引用参数组的参数>任务引用参数组的参数的优先级,合并得到参数,以最高优先级传递给被引用的任务,优先级高于任务内节点内设置的参数,高于引用的参数组中的参数。
开发模式运行时,会按照上面的优先级,生成循环参数中的参数。
案例: 被嵌套任务flow1,引用了一个参数组,其中变量str7=7,任务中包含一个SQL节点,节点设置了输入参数,str6=6。SQL节点代码如下:
SELECT '${str1}' as str1,
'${str2}' as str2,
'${str3}' as str3,
'${str4}' as str4,
'${str5}' as str5,
'${str6}' as str6,
'${str7}' as str7;
任务flow2,引用了一个参数组,其中变量str5=5。任务中包含嵌套流节点job1,并引用了已提交上线的flow1。
job1设置了循环执行,并设置了循环参数,str1=1,str2=${str22},str3=${str33},并设置了输入参数,str22=2,嵌套流参数str4=4。
开发模式选中job1运行,在运行设置中设置了str33=3。
结果:查询结果中,st1-str7,为1-7。