1. 概述
本文讲述如何在定时任务中配置并使用参数。
2. 步骤一:定义参数(必做)
FDL 中参数分为三类:任务内参数、全局参数、内置参数。如下图所示:
注:「参数列表」界面展示的参数为该任务可使用的参数。
2.1 任务内参数
2.1.1 任务参数(自定义参数)
该参数详细介绍请参见:自定义参数(静态参数);设置的参数可以被当前任务内的所有节点引用。适用于参数值个数较少、参数值已明确不需要计算的场景。
参数生成位置:
参数生成说明:
1)自定义时间参数:
自定义时间参数需要基于系统内置参数 ${cyctime},通过对 ${cyctime} 加减实现时间的自定义,自定义的格式为:${时间格式+N} 或${时间格式-N}。
「时间格式」可以通过 yyyy、yy、mm、dd、hh、mi、ss 自由组合成 yyyy、mm、dd、yyyymm、mmdd、yyyymmdd、yyyy-mm-dd、yyyy-mm-dd hh:mi:ss 等,其中:
注:参数格式不支持:mi:ss、mi、ss
2)自定义常量参数
常量参数支持设置的类型有:「文本」、「数值」、「布尔」。示例如下:
2.1.2 赋值参数
参数作用范围:下游分支的所有节点;适用于参数值较多,且参数值保存在数据库表、接口、文件等位置中,需要将参数值取出、计算(该操作可不做)的场景。
在 FDL 中对数据经过复杂处理后,支持使用 参数赋值节点、参数输出算子 将处理后的结果输出为参数。如下图所示:
参数赋值节点与参数输出算子区别:
区分项 | 参数赋值 | 参数输出 |
---|---|---|
位置 | 与「数据转换」节点平级 | 数据转换节点内使用 |
使用方法 | 可生成参数的值,并输出参数,适用于参数值不需要经过复杂计算的场景 | 只能将其他算子处理的结果,输出为参数,自己无法生成参数的值 若参数值需要复杂计算才能得出,可使用参数输出算子 |
2.2 全局参数
参数作用范围:可被当前工程所有定时任务使用;适用于参数值不需要经过复杂计算的场景。
参数类型支持:日期、文本、数值、布尔;设置内容与本文 2.1.1 节任务参数(自定义参数)相同。
可设置全局动态参数。如下图所示:
2.3 内置参数
FDL内置参数,无需定义即可使用。如下图所示:
3. 步骤二:设置参数默认值(建议做)
3.1 说明
本文 2.1.2 节 参数赋值节点、参数输出 的参数、2.2 节中的全局参数-赋值参数,建议设置参数默认值,且参数默认值为有效的,即为参数预览出的结果。如下图所示:
注1:参数默认值只是为了便于下游节点预览数据,不参与实际运行。
注2:若开启闭包符,参数值将被单引号框起来,若后续节点引用参数时,需注意单引号/双引号的使用,若再带层单引号或双引号,可能导致取数失败;例如参数 a 值为 '北京' ,后续引用该参数时又带了一层单引号('${a}'),则参数值会变为 ''北京''
便于后续节点使用参数,查看参数引用效果,确认任务设置是否正确。如下图所示:
3.2 注意事项
3.2.1 参数值需为最新
若参数的值为动态变化的,建议更新参数默认值后,再预览使用参数后的结果,保证预览结果为最新数据。例如参数值为access_token(动态变化且过段时间失效),调试任务时需要更新参数默认值。否则,下游节点预览失败。如下图所示:
3.2.2 循环容器节点引用参数,参数默认值为多个
参数默认值可以填写多个,如下图所示:
「循环容器」节点中,若引用该参数,会将参数默认值原样填入参数值中显示预览结果(若默认值为 5 个,后续节点引用时参数值为这 5 个),不会将参数默认值进行切分。如下图所示:
任务实际运行时,会将参数一个个传递给「循环容器」节点,即不影响任务实际运行,只影响预览结果。
所以,建议用户填写有效参数默认值,后续节点引用该参数后才能正常预览结果。
4. 使用参数(必做)
4.1 节点使用参数
参数定义好后,可在节点、算子中使用参数查询数据。
对于定义好的参数,引用方式有一些差异:
1)参数赋值节点、参数输出算子、全局参数-动态参数
此类参数如果定义的闭包符是正确的,那么使用时直接用${参数名}即可。闭包符定义相关详情参见:参数赋值功能说明
示例说明:
此类参数在设置时,可设置闭包符:
若闭包符开关开启,会自动给参数输出的值加引号:
数值型分隔:单个值示例:1;多个值示例:1,2,3
文本型分隔:单个值示例:'text';多个值示例:'text1','text2'
若输出的数据是多个值,且值不是数值时,需要开启闭包符。下游节点/算子引用该参数时,无需再加引号,直接用${参数名}即可。
若输出的数据是多个值,且值不是数值时,没有开启闭包符,下游节点/算子引用该参数时,需要加上引号,为'${参数名}'
2)任务参数(自定义参数)、内置参数、全局参数-静态参数
若参数为整型、双精度型、布尔型,直接用${参数名}的方式引用参数;
若参数值为字符类型、日期类型,需要加上单引号引用参数:'${参数名}'
3)特别情况说明
4.1.0 之前版本中,「循环容器」节点中引用参数时,会自动去掉参数的单引号,所以「循环容器」节点在使用文本型(分隔符选择文本型分隔)参数需要手动加上单引号。
4.1.0 及之后版本,「循环容器」节点中引用参数时,不再自动去掉参数的单引号,所以「循环容器」节点在使用文本型(开启闭包符)参数时无需手动加上单引号。
「参数赋值节点+循环容器」场景中,若「参数赋值」节点输出参数的分隔符选择「文本型分隔」,在循环容器内使用参数时加了单引号,升级到 4.1.0 及之后版本时,需要手动去掉单引号。
4.2 参数引用优先级
当「参数赋值」设置的参数与「自定义参数」和「内置参数」存在同名时,引用顺序将采用如下优先级:
整体优先级:「参数赋值」设置的参数>调用任务中父任务参数>「自定义参数」>「全局参数」>「内置参数」
局部优先级:由于一个任务中可新建多个「参数赋值」,可能存在两个及以上的同名参数可被下游节点引用,此时距离节点越近的「参数赋值」参数优先级越高。
注:循环容器内参数规则详情参见:容器内参数规则
4.3 跨层级传递参数
可以选择性地将任务参数和动态参数传递给子任务使用。
详情请参见:调用任务
4.4 查看参数
全局参数:
设置全局参数的地方可查看所有新建的全局参数。如下图所示:
任务内参数:
自定义参数(静态参数)、参数赋值节点、参数输出设置的参数,打开定时任务,点击「参数列表」,可查看该任务设置的这些参数:
5. 知识扩展
1)用户有时需要时间类型的参数,自定义时间参数 不能满足实际需要。例如,用户需要获取当月第一天、当月最后一天,并输出为参数。此类复杂的时间参数获取方法可参见:
注:用户可使用其他算子、节点,处理数据,得到想要的参数值,再将参数输出。
「参数赋值」节点实现:「参数赋值」节点中使用SQL语句获取参数值,再将参数输出:
使用Spark SQL 获取参数值,再使用「参数输出」算子将参数输出,详情请参见:使用SparkSQL构建日期列并循环取数、获取上月末、上年末等作为参数使用
2)参数支持加密后进行取数,详情请参见:API取数概述