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

map_size

Описание

Возвращает количество элементов в значении MAP. MAP — это неупорядоченная коллекция пар ключ-значение, например, {"a":1, "b":2}. Одна пара ключ-значение составляет один элемент, например, {"a":1, "b":2} содержит два элемента.

Эта функция имеет псевдоним cardinality(). Поддерживается начиная с версии 1.5.0.

Синтаксис

INT map_size(any_map)

Параметры

any_map: значение MAP, из которого вы хотите получить количество элементов.

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

Возвращает значение типа INT.

Если входное значение равно NULL, возвращается NULL.

Если ключ или значение в MAP равно NULL, NULL обрабатывается как обычное значение.

Примеры

Запрос данных MAP из нативной таблицы Selena

Начиная с версии 1.5.0, Selena поддерживает определение столбцов MAP при создании таблицы. В этом примере используется таблица test_map, которая содержит следующие данные:

CREATE TABLE test_map(
col_int INT,
col_map MAP<VARCHAR(50),INT>
)
DUPLICATE KEY(col_int);

INSERT INTO test_map VALUES
(1,map{"a":1,"b":2}),
(2,map{"c":3}),
(3,map{"d":4,"e":5});

SELECT * FROM test_map ORDER BY col_int;
+---------+---------------+
| col_int | col_map |
+---------+---------------+
| 1 | {"a":1,"b":2} |
| 2 | {"c":3} |
| 3 | {"d":4,"e":5} |
+---------+---------------+
3 rows in set (0.05 sec)

Получение количества элементов в каждой строке столбца col_map.

select map_size(col_map) from test_map order by col_int;
+-------------------+
| map_size(col_map) |
+-------------------+
| 2 |
| 1 |
| 2 |
+-------------------+
3 rows in set (0.05 sec)

Запрос данных MAP из озера данных

В этом примере используется Hive таблица hive_map, которая содержит следующие данные:

SELECT * FROM hive_map ORDER BY col_int;
+---------+---------------+
| col_int | col_map |
+---------+---------------+
| 1 | {"a":1,"b":2} |
| 2 | {"c":3} |
| 3 | {"d":4,"e":5} |
+---------+---------------+

После создания Hive catalog в вашем кластере, вы можете использовать этот catalog и функцию map_size() для получения количества элементов в каждой строке столбца col_map.

select map_size(col_map) from hive_map order by col_int;
+-------------------+
| map_size(col_map) |
+-------------------+
| 2 |
| 1 |
| 2 |
+-------------------+
3 rows in set (0.05 sec)