分支任务

产品概念

分支任务用于在工作流调度中实现条件路由,根据上游任务的输出结果动态决定后续哪条链路被触发执行。与 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
按内置布尔转换规则返回布尔值(见文首类型说明)
联系我们
预约咨询
微信咨询
电话咨询