分支任务

产品概念

分支任务用于在工作流调度中实现条件路由,根据上游任务的输出结果动态决定后续哪条链路被触发执行。与 For-each 循环任务类似,分支任务需要与有输出参数的上游任务联合使用,通过对输出数据集进行表达式计算,将结果映射到不同的下游链路上。

本文为你介绍分支任务的组成与应用逻辑。


使用场景

如果你在设计工作流的过程中,需要基于某一个节点的输出结果去判断后续如何执行时,则可以使用分支任务节点去进行路径的选择。

运行原理

  1. 上游任务输出:上游任务(SQL、Python、Shell 等)通过

    $[output]
    $[output]
    参数将数据集传递给下游分支节点。

  2. 分支任务:接收上游数据集,对其执行一系列表达式计算,根据计算结果决定触发哪条下游链路。

    • 输入参数:配置从哪条上游任务获取输出集,格式为
      ${参数名}={output}:上游任务名
      ${参数名}={output}:上游任务名
      。
    • 表达式:通过内置函数进行逻辑判断。表达式结果为
      true
      true
      时,该分支对应的下游链路被触发执行。
    • 分支输出名:每个分支条件对应一个输出名,用于与下游任务建立依赖关系。
  3. 下游任务引用:下游任务挂载依赖时,需指定与上游分支节点的哪个输出名关联。


操作步骤

创建分支任务

在任务列表或组合任务/任务组中,点击新建任务,选择任务类型为分支任务。

分支任务是可视化配置页面,每个分支需要配置以下信息:

分支条件

配置当前分支的判断表达式,支持的函数见:支持的表达式函数。

  • 如果运行态表达式取值为true,表示满足对应的分支条件。
  • 如果运行态表达式解析报错,会将整个分支节点运行状态置为失败。
  • 分支条件中支持使用全局变量和节点上下文定义的参数。例如,${input}可以是定义在分支节点的节点输入参数。

分支输出名

当前分支条件判断后的输出标识,用于与下游任务建立依赖。

  • 满足分支条件时:对应输出名挂载的下游节点被触发执行。
  • 不满足分支条件时:对应输出名挂载的下游节点不执行,状态置为因为分支条件不满足而结束。

输出名格式要求:支持中英文和下划线

_
_
,最多 128 个字符,同一分支任务内输出名不允许重复。

分支描述

非必填,用于记录该分支的简要说明。

配置分支下游任务

分支条件触发后,期望运行的下游节点需要进行响应的配置。 选择期望运行的下游节点,点击进入后,配置「调度配置」:在调度依赖中选择分支任务内具体的输出名。

例如: 例如,分支节点下游关联两个节点,节点名称分别为aaa和bbb。当分支条件为1时,以aaa节点逻辑运行。当分支条件为2时,以bbb节点逻辑运行。则配置分支节点时,关联到节点输出可以随便配置。例如,分支1关联节点输出为1234,分支2关联节点输出为2324,则均会作为本分支节点的输出名称。下游aaa节点需要挂载分支节点的输出名称1234,bbb节点需要挂载分支节点的输出名称2324。

支持的表达式函数

布尔转换规则:

null
null
、空字符串、空白字符串、
false
false
、数字
0
0
视为
false
false
;
true
true
、非零数字视为
true
true
;其他非数字字符串不会被当作
true
true
。

当前不支持:数学运算、日期时间、JSON Path / 对象属性访问、正则匹配、空值合并等函数。


逻辑函数

函数签名返回类型说明
and(arg1, arg2, ...)
and(arg1, arg2, ...)
boolean
boolean
所有参数转布尔后均为
true
true
时返回
true
true
,支持 1 个或多个参数。示例:
and(true, bool(1), equals('a', 'a'))
and(true, bool(1), equals('a', 'a'))
or(arg1, arg2, ...)
or(arg1, arg2, ...)
boolean
boolean
任一参数转布尔后为
true
true
即返回
true
true
,支持 1 个或多个参数
not(arg)
not(arg)
boolean
boolean
对参数做布尔取反

比较函数

两侧均可转为数字时按数值比较,否则按字符串字典序比较。

函数签名返回类型说明
equals(left, right)
equals(left, right)
boolean
boolean
两值标准化后相等返回
true
true
greater(left, right)
greater(left, right)
boolean
boolean
left > right
left > right
greaterOrEquals(left, right)
greaterOrEquals(left, right)
boolean
boolean
left >= right
left >= right
less(left, right)
less(left, right)
boolean
boolean
left < right
left < right
lessOrEquals(left, right)
lessOrEquals(left, right)
boolean
boolean
left <= right
left <= right

集合函数

集合函数适用于数组(

List
List
/
Collection
Collection
/
JSONArray
JSONArray
)、字符串,部分函数也支持字典(
JSONObject
JSONObject
/
Map
Map
)。

函数签名返回类型说明
contains(container, expected)
contains(container, expected)
boolean
boolean
字符串:判断是否包含子串;集合:按标准化值逐项比较;JSONObject / Map:判断是否包含指定 key
empty(value)
empty(value)
boolean
boolean
null
null
、空字符串、空集合、空 JSONObject / Map 均返回
true
true
first(value)
first(value)
首元素字符串返回首字符;List / Collection 返回首元素;空时返回
null
null
last(value)
last(value)
末元素字符串返回末字符;List / Collection 返回末元素;空时返回
null
null
length(value)
length(value)
integer
integer
字符串返回字符数;集合 / Map 返回元素个数;
null
null
返回
0
0
skip(value, count)
skip(value, count)
同输入类型跳过前
count
count
个字符或元素;
count < 0
count < 0
、非整数或
value
value
为
null
null
时直接返回原值
take(value, count)
take(value, count)
同输入类型保留前
count
count
个字符或元素;
count < 0
count < 0
、非整数或
value
value
为
null
null
时直接返回原值
union(list1, list2, ...)
union(list1, list2, ...)
List
List
合并多个列表并去重,保留首次出现顺序;所有参数必须可转为列表,否则返回
null
null
intersection(list1, list2, ...)
intersection(list1, list2, ...)
List
List
返回多个列表的交集,顺序以第一个列表为准;所有参数必须可转为列表,否则返回
null
null
join(list, separator)
join(list, separator)
String
String
用分隔符拼接列表所有元素;第一个参数必须可转为列表,否则返回
null
null

字符串函数

函数签名返回类型说明
concat(arg1, arg2, ...)
concat(arg1, arg2, ...)
String
String
按顺序拼接所有参数,
null
null
参数会被忽略,支持 1 个或多个参数
guid()
guid()
String
String
生成一个随机 UUID 字符串,不接受参数
indexOf(text, search)
indexOf(text, search)
integer
integer
返回子串首次出现位置,找不到返回
-1
-1
lastIndexOf(text, search)
lastIndexOf(text, search)
integer
integer
返回子串最后一次出现位置,找不到返回
-1
-1
replace(text, oldValue, newValue)
replace(text, oldValue, newValue)
String
String
替换所有匹配子串;
text
text
为
null
null
返回空字符串;
oldValue
oldValue
或
newValue
newValue
为
null
null
时按空字符串处理
split(text, separator)
split(text, separator)
List<String>
List<String>
按分隔符切分字符串;分隔符为空字符串时按单字符切分;
text
text
为
null
null
返回空列表
startsWith(text, prefix)
startsWith(text, prefix)
boolean
boolean
检查字符串是否以指定前缀开头
endsWith(text, suffix)
endsWith(text, suffix)
boolean
boolean
检查字符串是否以指定后缀结尾
substring(text, start, length)
substring(text, start, length)
String
String
从
start
start
位置截取
length
length
个字符;
start
start
超界、参数非法或为负数时返回空字符串;末尾超界时自动截断
toLower(value)
toLower(value)
String
String
转小写;
null
null
返回空字符串
toUpper(value)
toUpper(value)
String
String
转大写;
null
null
返回空字符串
trim(value)
trim(value)
String
String
去除首尾空白;
null
null
返回空字符串
string(value)
string(value)
String
String
将值转为字符串;
null
null
返回空字符串

转换函数

函数签名返回类型说明
bool(value)
bool(value)
boolean
boolean
按内置布尔转换规则返回布尔值(见文首类型说明)

相关文档

联系我们
预约咨询
微信咨询
电话咨询
邮件咨询