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