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

MAP_FILTER

SinceVersion dev

Описание​

Фильтрует элементы отображения и возвращает отображение, содержащее только выбранные элементы.

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

Синтаксис​

MAP_FILTER((<key>, <value>) -> <predicate>, <map>)
MAP_FILTER(<map>, <filter_array>)

Параметры​

ПараметрОписание
<key>Параметр лямбда-выражения, представляющий ключ элемента отображения.
<value>Параметр лямбда-выражения, представляющий значение элемента отображения.
<predicate>Логическое выражение, вычисляемое для каждого элемента отображения. Элементы, для которых оно возвращает TRUE, сохраняются.
<map>Выражение типа MAP<K, V>.
<filter_array>Выражение типа ARRAY<BOOLEAN>. Каждый элемент массива определяет выбор элемента отображения на той же позиции. Длина массива должна совпадать с количеством элементов в отображении.

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

Возвращает MAP<K, V>, содержащее выбранные элементы.

  • В форме с лямбда-выражением элементы, для которых предикат возвращает FALSE или NULL, удаляются.
  • В форме с массивом логических значений элементы, соответствующие значениям FALSE или NULL, удаляются.
  • Если <map> пусто, возвращает пустое отображение.
  • Если <map> имеет значение NULL, возвращает NULL.
  • В форме с массивом логических значений, если <filter_array> имеет значение NULL, возвращает NULL.

Примеры​

SELECT map_filter((k, v) -> v >= 20, map(1, 10, 2, 20, 3, 30)) AS result;
+--------------+
| result |
+--------------+
| {2:20, 3:30} |
+--------------+
SELECT map_filter(
(k, v) -> if(k = 1, CAST(NULL AS BOOLEAN), TRUE),
map(1, 10, 2, 20)) AS result;
+--------+
| result |
+--------+
| {2:20} |
+--------+
SELECT map_filter(map(1, 10, 2, 20), [TRUE, FALSE]) AS result;
+--------+
| result |
+--------+
| {1:10} |
+--------+
SELECT map_filter((k, v) -> TRUE, CAST(NULL AS MAP<INT, INT>)) AS result;
+--------+
| result |
+--------+
| NULL |
+--------+