Лямбда-функции
Область применения: Databricks SQL Databricks Runtime
Параметризованное выражение, которое можно передать функции для управления ее поведением.
Например, функция array_sort принимает лямбда-функцию в качестве аргумента, чтобы задать пользовательский порядок сортировки.
Синтаксис
{ param -> expr |
(param1 [, ...] ) -> expr }
Параметры
-
paramN
: идентификатор , используемый родительской функцией для передачи аргументов для лямбда-функции. -
expr
: любое простое выражение, ссылающеесяparamN
на нее, которое не содержит вложенный запрос или определяемую пользователем функцию SQL.
Возвраты
Тип результата определяется типом результата expr
.
Если существует несколько paramN
, имена параметров должны быть уникальными. Типы параметров задаются вызывающей функцией.
expression
должно быть допустимым для этих типов, а тип результата должен соответствовать ожиданиям вызывающих функций.
Примеры
Функция array_sort ожидает лямбда-функцию с двумя параметрами.
Типы параметров будут принадлежать к типу элементов сортируемого массива.
Ожидается, что выражение возвращает целое число, где -1 означает param1
<param2
, 0 означает param1
= param2
и 1 в противном случае.
Чтобы отсортировать массив строк в лексической последовательности справа налево, можно использовать следующую лямбда-функцию.
(p1, p2) -> CASE WHEN p1 = p2 THEN 0
WHEN reverse(p1) < reverse(p2) THEN -1
ELSE 1 END
Лямбда-функции определяются и используются динамически. Поэтому определение функции является аргументом:
> 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]