ClickHouse/docs/ru/sql-reference/functions/tuple-map-functions.md
Olga Revyakina 2905df831f JSON deteted
2021-02-11 10:15:18 +03:00

8.9 KiB
Raw Blame History

toc_priority toc_title
46 Работа с контейнерами map

Функции для работы с контейнерами map

map

Преобразовывает пары ключ:значение в тип данных Map(key, value).

Синтаксис

map(key1, value1[, key2, value2, ...])

Параметры

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

  • Структура данных в виде пар ключ:значение.

Тип: Map(key, value).

Примеры

Запрос:

SELECT map('key1', number, 'key2', number * 2) FROM numbers(3);

Результат:

┌─map('key1', number, 'key2', multiply(number, 2))─┐
│ {'key1':0,'key2':0}                              │
│ {'key1':1,'key2':2}                              │
│ {'key1':2,'key2':4}                              │
└──────────────────────────────────────────────────┘

Запрос:

CREATE TABLE table_map (a Map(String, UInt64)) ENGINE = MergeTree() ORDER BY a;
INSERT INTO table_map SELECT map('key1', number, 'key2', number * 2) FROM numbers(3);
SELECT a['key2'] FROM table_map;

Результат:

┌─arrayElement(a, 'key2')─┐
│                       0 │
│                       2 │
│                       4 │
└─────────────────────────┘

См. также

mapAdd

Собирает все ключи и суммирует соответствующие значения.

Синтаксис

mapAdd(Tuple(Array, Array), Tuple(Array, Array) [, ...])

Параметры

Аргументами являются кортежи из двух массивов, где элементы в первом массиве представляют ключи, а второй массив содержит значения для каждого ключа. Все массивы ключей должны иметь один и тот же тип, а все массивы значений должны содержать элементы, которые можно приводить к одному типу (Int64, UInt64 или Float64). Общий приведенный тип используется в качестве типа для результирующего массива.

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

  • Возвращает один кортеж, в котором первый массив содержит отсортированные ключи, а второй — значения.

Пример

Запрос:

SELECT mapAdd(([toUInt8(1), 2], [1, 1]), ([toUInt8(1), 2], [1, 1])) as res, toTypeName(res) as type;

Результат:

┌─res───────────┬─type───────────────────────────────┐
│ ([1,2],[2,2]) │ Tuple(Array(UInt8), Array(UInt64)) │
└───────────────┴────────────────────────────────────┘

mapSubtract

Собирает все ключи и вычитает соответствующие значения.

Синтаксис

mapSubtract(Tuple(Array, Array), Tuple(Array, Array) [, ...])

Параметры

Аргументами являются кортежи из двух массивов, где элементы в первом массиве представляют ключи, а второй массив содержит значения для каждого ключа. Все массивы ключей должны иметь один и тот же тип, а все массивы значений должны содержать элементы, которые можно приводить к одному типу (Int64, UInt64 или Float64). Общий приведенный тип используется в качестве типа для результирующего массива.

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

  • Возвращает один tuple, в котором первый массив содержит отсортированные ключи, а второй - значения.

Пример

Запрос:

SELECT mapSubtract(([toUInt8(1), 2], [toInt32(1), 1]), ([toUInt8(1), 2], [toInt32(2), 1])) as res, toTypeName(res) as type;

Результат:

┌─res────────────┬─type──────────────────────────────┐
│ ([1,2],[-1,0]) │ Tuple(Array(UInt8), Array(Int64)) │
└────────────────┴───────────────────────────────────┘

mapPopulateSeries

Заполняет недостающие ключи в контейнере map (пара массивов ключей и значений), где ключи являются целыми числами. Кроме того, он поддерживает указание максимального ключа, который используется для расширения массива ключей.

Синтаксис

mapPopulateSeries(keys, values[, max])

Генерирует контейнер map, где ключи - это серия чисел, от минимального до максимального ключа (или аргумент max, если он указан), взятых из массива keys с размером шага один, и соответствующие значения, взятые из массива values. Если значение не указано для ключа, то в результирующем контейнере используется значение по умолчанию.

Количество элементов в keys и values должно быть одинаковым для каждой строки.

Параметры

  • keys — Массив ключей Array(Int).
  • values — Массив значений. Array(Int).

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

  • Возвращает кортеж из двух массивов: ключи отсортированные по порядку и значения соответствующих ключей.

Пример

Запрос:

select mapPopulateSeries([1,2,4], [11,22,44], 5) as res, toTypeName(res) as type;

Результат:

┌─res──────────────────────────┬─type──────────────────────────────┐
│ ([1,2,3,4,5],[11,22,0,44,0]) │ Tuple(Array(UInt8), Array(UInt8)) │
└──────────────────────────────┴───────────────────────────────────┘

Оригинальная статья