ClickHouse/docs/ru/sql-reference/functions/tuple-map-functions.md
2020-12-23 02:27:53 +03:00

7.0 KiB
Raw Blame History

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

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

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)) │
└──────────────────────────────┴───────────────────────────────────┘

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