Лямбда-функции

Область применения: флажок 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]