Lambda 函数

适用于:check marked yes Databricks SQL check marked yes Databricks Runtime

可传递到函数以控制其行为的参数化表达式。

例如,array_sort 函数接受 lambda 函数作为参数来定义自定义排序顺序。

语法

{ param -> expr |
  (param1 [, ...] ) -> expr }

参数

  • paramN:父函数用来传递 lambda 函数参数的标识符
  • expr:任何引用 paramN 的简单表达式,其中不包含子查询或 SQL 用户定义函数。

返回

结果类型由 expr 的结果类型定义。

如果有多个 paramN,则参数名称必须是唯一的。 参数的类型由调用函数设置。 expression 必须对这些类型有效,并且结果类型必须与调用函数的定义的预期值相匹配。

示例

array_sort 函数需要一个带有两个参数的 lambda 函数。 参数类型将是要排序的数组元素的类型。 该表达式应返回整数,其中 -1 表示 param1<param2,0 表示 param1 = param2,否则为 1。

若要按从右到左的词法顺序对字符串数组进行排序,可以使用以下 lambda 函数。

(p1, p2) -> CASE WHEN p1 = p2 THEN 0
                 WHEN reverse(p1) < reverse(p2) THEN -1
                 ELSE 1 END

Lambda 函数是临时定义和使用的。 因此函数定义是参数:

> SELECT array_sort(array('Hello', 'World'),
  (p1, p2) -> CASE WHEN p1 = p2 THEN 0
              WHEN reverse(p1) < reverse(p2) THEN -1
              ELSE 1 END);
[World, Hello]