Lambda 表达式
Lambda 表达式是匿名函数,可以作为参数传递到高阶 SQL 函数中。 Lambda 表达式允许您开发更简洁、优雅且可扩展的代码。
Lambda 表达式使用 ->
运算符编写,读作“goes to”。 ->
的左侧是输入参数(如果有),右侧是一个表达式。
从 v2.5 开始,StarRocks 支持在以下高阶 SQL 函数中使用 lambda 表达式:array_map()、array_filter()、array_sum() 和 array_sortby()。
语法
parameter -> expression
参数
-
parameter
:lambda 表达式的输入参数,可以接受零个、一个或多个参数。 两个或多个输入参数用括号括起来。 -
expression
:引用parameter
的简单表达式。 该表达式对于输入参数必须有效。
返回值
返回值的类型由 expression
的结果类型决定。
使用说明
几乎所有的标量函数都可以在 lambda 主体中使用。 但也有一些例外
- 不支持子查询,例如,
x -> 5 + (SELECT 3)
。 - 不支持聚合函数,例如,
x -> min(y)
。 - 不支持窗口函数。
- 不支持表函数。
- 相关列不能出现在 lambda 函数中。
示例
lambda 表达式的简单示例
-- Accepts no parameters and returns 5.
() -> 5
-- Takes x and returns the value of (x + 2).
x -> x + 2
-- Takes x and y, and returns their sum.
(x, y) -> x + y
-- Takes x and applies a function to x.
x -> COALESCE(x, 0)
x -> day(x)
x -> split(x,",")
x -> if(x>0,"positive","negative")
在高阶函数中使用 lambda 表达式的示例
select array_map((x,y,z) -> x + y, [1], [2], [4]);
+----------------------------------------------+
| array_map((x, y, z) -> x + y, [1], [2], [4]) |
+----------------------------------------------+
| [3] |
+----------------------------------------------+
1 row in set (0.01 sec)