Lambda 表达式使用 -> 来表示:

1
2
3
4
5
6
7
8
x -> x + 1
(x, y) -> x + y
x -> regexp_like(x, 'a+')
x -> x[1] / x[2]
x -> IF(x > 0, x, -x)
x -> COALESCE(x, 0)
x -> CAST(x AS JSON)
x -> x + TRY(1 / 0)

大多数 SQL 表达式都可以在 Lambda 主体中使用,但有几个例外:

  • 不支持子查询。如 x -> 2 + (SELECT 3)
  • 不支持聚合。如 x -> max(y)

示例

以下示例演示了使用 split_to_map() 函数对字符串进行层层分割,并返回一个映射(Map)。

首先,将字符串按 ; 划分为多个键值对。

其次,进一步将每对键值对按 : 划分为键和对应的值。

如果存在键重复的情况,则调用 Lambda 表达式 (k, v1, v2) -> concat(v1, v2) 来确定映射中的值,这里是将重复键的值拼接起来作为一个值。

1
2
3
select split_to_map('a:1;b:2;a:3', ';', ':', (k, v1, v2) -> concat(v1, v2))

-- 输出结果为 {"a": "13", "b": "2"}

(END)