跳到主要内容
版本: 最新版本-3.5

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)