Поделиться через


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

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