Map(key, value)
Тип данных Map(key, value)
хранит пары ключ:значение
.
Параметры
- key
— ключ. String или Integer.
- value
— значение. String, Integer или Array.
Предупреждение
Сейчас использование типа данных Map
является экспериментальной возможностью. Чтобы использовать этот тип данных, включите настройку allow_experimental_map_type = 1
.
Чтобы получить значение из колонки a Map('key', 'value')
, используйте синтаксис a['key']
. В настоящее время такая подстановка работает по алгоритму с линейной сложностью.
Примеры
Рассмотрим таблицу:
CREATE TABLE table_map (a Map(String, UInt64)) ENGINE=Memory;
INSERT INTO table_map VALUES ({'key1':1, 'key2':10}), ({'key1':2,'key2':20}), ({'key1':3,'key2':30});
Выборка всех значений ключа key2
:
SELECT a['key2'] FROM table_map;
Результат:
┌─arrayElement(a, 'key2')─┐
│ 10 │
│ 20 │
│ 30 │
└─────────────────────────┘
Если для какого-то ключа key
в колонке с типом Map()
нет значения, запрос возвращает нули для числовых колонок, пустые строки или пустые массивы.
INSERT INTO table_map VALUES ({'key3':100}), ({});
SELECT a['key3'] FROM table_map;
Результат:
┌─arrayElement(a, 'key3')─┐
│ 100 │
│ 0 │
└─────────────────────────┘
┌─arrayElement(a, 'key3')─┐
│ 0 │
│ 0 │
│ 0 │
└─────────────────────────┘
См. также