diff --git a/docs/en/sql-reference/data-types/map.md b/docs/en/sql-reference/data-types/map.md index 0f0f69d421db7697a09806304c066556dbb73281..58634e5b669973c015f8a833056a883df3649880 100644 --- a/docs/en/sql-reference/data-types/map.md +++ b/docs/en/sql-reference/data-types/map.md @@ -5,7 +5,7 @@ toc_title: Map(key, value) # Map(key, value) {#data_type-map} -`Map(key, value)` data type stores `key:value` pairs in structures like JSON. +`Map(key, value)` data type stores `key:value` pairs. **Parameters** - `key` — The key part of the pair. [String](../../sql-reference/data-types/string.md) or [Integer](../../sql-reference/data-types/int-uint.md). @@ -14,24 +14,50 @@ toc_title: Map(key, value) !!! warning "Warning" Currently `Map` data type is an experimental feature. To work with it you must set `allow_experimental_map_type = 1`. -To get the value from an `a Map('key', 'value')` column, use `a['key']` syntax. +To get the value from an `a Map('key', 'value')` column, use `a['key']` syntax. This lookup works now with a linear complexity. -**Example** +**Examples** -Query: +Consider the table: ``` sql CREATE TABLE table_map (a Map(String, UInt64)) ENGINE=Memory; -INSERT INTO table_map VALUES ({'key1':1, 'key2':100}), ({'key1':2,'key2':200}), ({'key1':3,'key2':300}); +INSERT INTO table_map VALUES ({'key1':1, 'key2':10}), ({'key1':2,'key2':20}), ({'key1':3,'key2':30}); +``` + +Select all `key2` values: + +```sql SELECT a['key2'] FROM table_map; ``` Result: ```text ┌─arrayElement(a, 'key2')─┐ +│ 10 │ +│ 20 │ +│ 30 │ +└─────────────────────────┘ +``` + +If there's no such `key` in the `Map()` column, the query returns zeros for numerical values, empty strings or empty arrays. + +```sql +INSERT INTO table_map VALUES ({'key3':100}), ({}); +SELECT a['key3'] FROM table_map; +``` + +Result: + +```text +┌─arrayElement(a, 'key3')─┐ │ 100 │ -│ 200 │ -│ 300 │ +│ 0 │ +└─────────────────────────┘ +┌─arrayElement(a, 'key3')─┐ +│ 0 │ +│ 0 │ +│ 0 │ └─────────────────────────┘ ``` diff --git a/docs/en/sql-reference/functions/tuple-map-functions.md b/docs/en/sql-reference/functions/tuple-map-functions.md index b81f971196ad40e93c2686ea683cbbdcae9d9528..18d008f11f25903465fa1674b405fc6034a5854a 100644 --- a/docs/en/sql-reference/functions/tuple-map-functions.md +++ b/docs/en/sql-reference/functions/tuple-map-functions.md @@ -7,7 +7,7 @@ toc_title: Working with maps ## map {#function-map} -Arranges `key:value` pairs into a JSON data structure. +Arranges `key:value` pairs into [Map(key, value)](../../sql-reference/data-types/map.md) data type. **Syntax** @@ -22,7 +22,7 @@ map(key1, value1[, key2, value2, ...]) **Returned value** -- JSON with `key:value` pairs. +- Data structure as `key:value` pairs. Type: [Map(key, value)](../../sql-reference/data-types/map.md). diff --git a/docs/ru/sql-reference/data-types/map.md b/docs/ru/sql-reference/data-types/map.md index c1391e371339c1b0ea80e3890ef7cb18f6053a70..9c2ffedc4a9305efa1a8da8cce7308f860453464 100644 --- a/docs/ru/sql-reference/data-types/map.md +++ b/docs/ru/sql-reference/data-types/map.md @@ -5,7 +5,7 @@ toc_title: Map(key, value) # Map(key, value) {#data_type-map} -Тип данных `Map(key, value)` хранит пары `ключ:значение` в структурах типа JSON. +Тип данных `Map(key, value)` хранит пары `ключ:значение`. **Параметры** - `key` — ключ. [String](../../sql-reference/data-types/string.md) или [Integer](../../sql-reference/data-types/int-uint.md). @@ -14,39 +14,51 @@ toc_title: Map(key, value) !!! warning "Предупреждение" Сейчас использование типа данных `Map` является экспериментальной возможностью. Чтобы использовать этот тип данных, включите настройку `allow_experimental_map_type = 1`. -Чтобы получить значение из колонки `a Map('key', 'value')`, используйте синтаксис `a['key']`. +Чтобы получить значение из колонки `a Map('key', 'value')`, используйте синтаксис `a['key']`. В настоящее время такая подстановка работает по алгоритму с линейной сложностью. -**Пример** +**Примеры** -Запрос: +Рассмотрим таблицу: ``` sql CREATE TABLE table_map (a Map(String, UInt64)) ENGINE=Memory; -INSERT INTO table_map VALUES ({'key1':1, 'key2':100}), ({'key1':2,'key2':200}), ({'key1':3,'key2':300}); +INSERT INTO table_map VALUES ({'key1':1, 'key2':10}), ({'key1':2,'key2':20}), ({'key1':3,'key2':30}); +``` + +Выборка всем значений ключа `key2`: + +```sql SELECT a['key2'] FROM table_map; ``` Результат: ```text ┌─arrayElement(a, 'key2')─┐ -│ 100 │ -│ 200 │ -│ 300 │ +│ 10 │ +│ 20 │ +│ 30 │ └─────────────────────────┘ ``` -## Преобразование типа данных Tuple в Map {#map-and-tuple} - -Для преобразования данных с типом `Tuple()` в тип `Map()` можно использовать функцию [CAST](../../sql-reference/functions/type-conversion-functions.md#type_conversion_function-cast): +Если для какого-то ключа `key` в колонке с типом `Map()` нет значения, запрос возвращает нули для числовых колонок, пустые строки или пустые массивы. -``` sql -SELECT CAST(([1, 2, 3], ['Ready', 'Steady', 'Go']), 'Map(UInt8, String)') AS map; +```sql +INSERT INTO table_map VALUES ({'key3':100}), ({}); +SELECT a['key3'] FROM table_map; ``` -``` text -┌─map───────────────────────────┐ -│ {1:'Ready',2:'Steady',3:'Go'} │ -└───────────────────────────────┘ +Результат: + +```text +┌─arrayElement(a, 'key3')─┐ +│ 100 │ +│ 0 │ +└─────────────────────────┘ +┌─arrayElement(a, 'key3')─┐ +│ 0 │ +│ 0 │ +│ 0 │ +└─────────────────────────┘ ``` **См. также** diff --git a/docs/ru/sql-reference/functions/tuple-map-functions.md b/docs/ru/sql-reference/functions/tuple-map-functions.md index 65e44698008c3bc18928f4f3abfa06148ae37fb7..a36613280a14e255c5dacd15cd8988ddd5298cd9 100644 --- a/docs/ru/sql-reference/functions/tuple-map-functions.md +++ b/docs/ru/sql-reference/functions/tuple-map-functions.md @@ -7,7 +7,7 @@ toc_title: Работа с контейнерами map ## map {#function-map} -Преобразовывает пары `ключ:значение` в структуру JSON. +Преобразовывает пары `ключ:значение` в тип данных [Map(key, value)](../../sql-reference/data-types/map.md). **Синтаксис** @@ -22,7 +22,7 @@ map(key1, value1[, key2, value2, ...]) **Возвращаемое значение** -- Структура JSON с парами `ключ:значение`. +- Структура данных в виде пар `ключ:значение`. Тип: [Map(key, value)](../../sql-reference/data-types/map.md).