Последнее обновление
MAP_APPLY
Описание
Применяет лямбда-выражение к каждой записи отображения и создаёт новое отображение из преобразованных ключей и значений. Лямбда-выражение принимает ключ и значение каждой записи и возвращает пару выражений. Первое выражение задаёт новый ключ, а второе задаёт новое значение.
Синтаксис
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 |
+--------+