EMR Workflow支持配置内置时间参数、任务级别参数(本地参数)、工作流级别参数(全局参数)和项目级别参数,同时还支持参数传递功能。
参数配置
内置时间参数
参数定义
内置时间参数无需定义,可以直接在任务中使用。
参数使用
EMR Workflow支持$[...]
格式的内置时间参数,$[yyyyMMddHHmmss]
是可以任意分解组合的,例如$[yyyyMMdd]
、$[HHmmss]
、$[yyyy-MM-dd]
等。您也可以通过以下两种方式对时间参数进行修改:
使用
add_months()
函数,该函数用于加减月份, 第一个入口参数为[yyyyMMdd]
,表示返回时间的格式;第二个入口参数为月份偏移量,表示加减多少个月。后 N 年:
$[add_months(yyyyMMdd,12*N)]
前 N 年:
$[add_months(yyyyMMdd,-12*N)]
后 N 月:
$[add_months(yyyyMMdd,N)]
前 N 月:
$[add_months(yyyyMMdd,-N)]
直接加减数字,在自定义格式后直接“+/-”数字
后 N 周:
$[yyyyMMdd+7*N]
前 N 周:
$[yyyyMMdd-7*N]
后 N 天:
$[yyyyMMdd+N]
前 N 天:
$[yyyyMMdd-N]
后 N 小时:
$[HHmmss+N/24]
前 N 小时:
$[HHmmss-N/24]
后 N 分钟:
$[HHmmss+N/24/60]
前 N 分钟:
$[HHmmss-N/24/60]
任务级别参数(本地参数)
任务级别参数是指针对任务节点有效的参数。在任务定义页面配置的自定义参数,默认仅作用于该任务。如果配置了参数传递则可将该参数作用到下游任务中。
参数定义
在任务定义页面,单击自定义参数的图标,新增自定义参数,配置如下图所示。
参数示例说明:
dt
:自定义参数的参数名。IN
:表示参数仅能在当前节点使用。如果设置为OUT,则表示参数可以向下游传递。VARCHAR
:参数的数据类型。$[yyyy-MM-dd]
:参数对应的值。
参数使用
在任务定义中,通过${...}
的方式使用本地参数。
工作流级别参数(全局参数)
全局参数是指针对整个工作流的所有任务节点都有效的参数,在保存工作流定义时配置。
参数定义
在保存工作流定义时,可以添加全局参数,填写对应的参数名称和参数值。
参数使用
在保存工作流定义时,通过${...}
的方式使用全局参数。
项目级别参数
项目级别参数是指针对整个项目中所有工作流都有效的参数。
参数定义
在项目管理下的
页面,单击创建项目级别参数,填写对应的参数名称和参数值。参数使用
在任务定义中,通过${...}
的方式使用项目级别的参数。
参数传递
EMR Workflow允许在任务间进行参数传递,目前传递方向仅支持上游任务单向传递给下游任务。
配置参数传递时,需要在上游任务中配置方向为OUT的自定义参数,声明该参数会向下游任务传递。同时需要在上游任务中增加echo语句,格式为echo "#{setValue(key=value)}"
,其中key为OUT类型参数的参数名,value为希望向下游传递的参数值,可以为常量、其他任务参数的值或者bash脚本中的变量值。下游任务无需参数配置,可以直接通过${...}
的方式使用上游任务传递给下游任务的参数。
参数传递示例:
传递常量
例如,新增OUT方向的自定义参数res,通过echo "#{setValue(res=1234)}"
向下游任务传递参数res=1234。
传递任务参数
例如,新增IN方向的参数param=123
,OUT方向的自定义参数res,通过echo "#{setValue(res=${param})}"
向下游任务传递参数res为param的值,即123。
传递bash变量
例如,新增OUT方向的自定义参数res,通过echo "#{setValue(res=${RESULT})}"
向下游任务传递参数res为bash变量RESULT的值,即123。
参数优先级
EMR Workflow中涉及的参数值的定义来自以下类型:
因为参数的值存在多个来源,当参数名相同时,就会存在参数优先级的问题。EMR Workflow参数的优先级从高到低为:任务级别参数(本地参数) > 上游任务传递给下游任务的参数 > 工作流级别参数(全局参数) > 项目级别参数
。