cardinality
Возвращает количество элементов в значении MAP. MAP — это неупорядоченная коллекция пар ключ-значение, например, {"a":1, "b":2}. Одна пара ключ-значение составляет один элемент. {"a":1, "b":2} содержит два элемента.
Эта функция поддерживается начиная с версии v1.5.2. Она является псевдонимом map_size().
Синтаксис
INT cardinality(any_map)
Параметры
any_map: значение MAP, из которого вы хотите получить количество элементов.
Возвращаемое значение
Возвращает значение типа INT.
Если входное значение равно NULL, возвращается NULL.
Если ключ или значение в MAP равно NULL, NULL обрабатывается как обычное значение.
Примеры
Запрос данных MAP из нативной таблицы Selena
Начиная с версии v1.5.2, 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 cardinality(col_map) from test_map order by col_int;
+----------------------+
| cardinality(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 в вашем cluster вы можете использовать этот каталог и функцию cardinality() для получения количества элементов в каждой строке столбца col_map.
SELECT cardinality(col_map) FROM hive_map ORDER BY col_int;
+----------------------+
| cardinality(col_map) |
+----------------------+
| 2 |
| 1 |
| 2 |
+----------------------+
3 rows in set (0.05 sec)