Перейти к содержимому
Последнее обновление

MAP_APPLY

SinceVersion dev

Описание​

Применяет лямбда-выражение к каждой записи отображения и создаёт новое отображение из преобразованных ключей и значений. Лямбда-выражение принимает ключ и значение каждой записи и возвращает пару выражений. Первое выражение задаёт новый ключ, а второе задаёт новое значение.

Синтаксис​

MAP_APPLY((<key>, <value>) -> (<new_key>, <new_value>), <map>)
MAP_APPLY((<key>, <value>) -> STRUCT(<new_key>, <new_value>), <map>)

Параметры​

ПараметрОписание
<key>Параметр лямбда-выражения, представляющий ключ записи отображения.
<value>Параметр лямбда-выражения, представляющий значение записи отображения.
<new_key>Выражение, формирующее ключ в возвращаемом отображении. Его тип должен поддерживаться для ключей MAP.
<new_value>Выражение, формирующее значение в возвращаемом отображении.
<map>Выражение типа MAP<K, V>.

Возвращаемое значение​

Возвращает MAP<K2, V2>, где K2 и V2 обозначают типы первого и второго полей, возвращаемых лямбда-выражением.

  • Если <map> пусто, возвращает пустое отображение.
  • Если <map> имеет значение NULL, возвращает NULL.
  • Поля со значением NULL, возвращаемые лямбда-выражением, сохраняются как ключи или значения NULL.
  • Если несколько записей преобразуются в один и тот же ключ, сохраняется значение последней из них.
  • Лямбда-выражение должно возвращать STRUCT, не допускающий NULL и содержащий ровно два поля. Синтаксис кортежа (<new_key>, <new_value>) эквивалентен STRUCT(<new_key>, <new_value>); структура, допускающая NULL, или результат с другим количеством полей приводит к ошибке анализа.

Примеры​

SELECT map_apply((k, v) -> (k + 10, v * 2), map(1, 10, 2, 20)) AS result;
+------------------+
| result |
+------------------+
| {11:20, 12:40} |
+------------------+
SELECT map_apply((k, v) -> (1, v), map(1, 10, 2, 20)) AS result;
+--------+
| result |
+--------+
| {1:20} |
+--------+
SELECT map_apply((k, v) -> (k, v), CAST(NULL AS MAP<INT, INT>)) AS result;
+--------+
| result |
+--------+
| NULL |
+--------+