Перейти к основному содержимому
Перейти к основному содержимому

Функции Map

map

Создает значение типа Map(key, value) из пар ключ-значение.

Синтаксис

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

Аргументы

  • key_n — Ключи элементов карты. Любой тип, поддерживаемый в качестве типа ключа Map.
  • value_n — Значения элементов карты. Любой тип, поддерживаемый в качестве типа значения Map.

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

Примеры

Запрос:

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

mapFromArrays

Создает карту из массива или карты ключей и массива или карты значений.

Эта функция является удобной альтернативой синтаксису CAST([...], 'Map(key_type, value_type)'). Например, вместо того чтобы писать

  • CAST((['aa', 'bb'], [4, 5]), 'Map(String, UInt32)'), или
  • CAST([('aa',4), ('bb',5)], 'Map(String, UInt32)')

вы можете написать mapFromArrays(['aa', 'bb'], [4, 5]).

Синтаксис

mapFromArrays(keys, values)

Псевдоним: MAP_FROM_ARRAYS(keys, values)

Аргументы

  • keys — Массив или карта ключей для создания карты из Array или Map. Если keys — это массив, принимаются Array(Nullable(T)) или Array(LowCardinality(Nullable(T))) в качестве его типа, при условии, что он не содержит значения NULL.
  • values - Массив или карта значений для создания карты из Array или Map.

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

  • Карта с ключами и значениями, построенными из массива ключей и массива/карты значений.

Пример

Запрос:

SELECT mapFromArrays(['a', 'b', 'c'], [1, 2, 3])

Результат:

┌─mapFromArrays(['a', 'b', 'c'], [1, 2, 3])─┐
│ {'a':1,'b':2,'c':3}                       │
└───────────────────────────────────────────┘

mapFromArrays также принимает аргументы типа Map. Эти аргументы преобразуются в массив кортежей во время выполнения.

SELECT mapFromArrays([1, 2, 3], map('a', 1, 'b', 2, 'c', 3))

Результат:

┌─mapFromArrays([1, 2, 3], map('a', 1, 'b', 2, 'c', 3))─┐
│ {1:('a',1),2:('b',2),3:('c',3)}                       │
└───────────────────────────────────────────────────────┘
SELECT mapFromArrays(map('a', 1, 'b', 2, 'c', 3), [1, 2, 3])

Результат:

┌─mapFromArrays(map('a', 1, 'b', 2, 'c', 3), [1, 2, 3])─┐
│ {('a',1):1,('b',2):2,('c',3):3}                       │
└───────────────────────────────────────────────────────┘

extractKeyValuePairs

Преобразует строку пар ключ-значение в Map(String, String). Парсинг терпимо относится к шуму (например, лог-файлам). Пары ключ-значение в входной строке состоят из ключа, за которым следует разделитель ключ-значение и значение. Пары ключей и значений разделяются парным разделителем. Ключи и значения могут быть заключены в кавычки.

Синтаксис

extractKeyValuePairs(data[, key_value_delimiter[, pair_delimiter[, quoting_character[, unexpected_quoting_character_strategy]]])

Псевдонимы:

  • str_to_map
  • mapFromString

Аргументы

  • data - Строка для извлечения пар ключ-значение. String или FixedString.
  • key_value_delimiter - Один символ, разделяющий ключи и значения. По умолчанию :. String или FixedString.
  • pair_delimiters - Набор символов, разделяющих пары. По умолчанию , , и ;. String или FixedString.
  • quoting_character - Один символ, используемый в качестве символа кавычек. По умолчанию ". String или FixedString.
  • unexpected_quoting_character_strategy - Стратегия обработки символов кавычек в неожиданных местах во время фаз read_key и read_value. Возможные значения: "invalid", "accept" и "promote". Invalid отбросит ключ/значение и вернется в состояние WAITING_KEY. Accept будет рассматривать это как обычный символ. Promote перейдет в состояние READ_QUOTED_{KEY/VALUE} и начнет с следующего символа.

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

Примеры

Запрос

SELECT extractKeyValuePairs('name:neymar, age:31 team:psg,nationality:brazil') AS kv

Результат:

┌─kv──────────────────────────────────────────────────────────────────────┐
│ {'name':'neymar','age':'31','team':'psg','nationality':'brazil'}        │
└─────────────────────────────────────────────────────────────────────────┘

С одинарной кавычкой ' в качестве символа кавычек:

SELECT extractKeyValuePairs('name:\'neymar\';\'age\':31;team:psg;nationality:brazil,last_key:last_value', ':', ';,', '\'') AS kv

Результат:

┌─kv───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ {'name':'neymar','age':'31','team':'psg','nationality':'brazil','last_key':'last_value'}                                 │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

примеры значений unexpected_quoting_character_strategy:

unexpected_quoting_character_strategy=invalid

SELECT extractKeyValuePairs('name"abc:5', ':', ' ,;', '\"', 'INVALID') AS kv;
┌─kv────────────────┐
│ {'abc':'5'}  │
└───────────────────┘
SELECT extractKeyValuePairs('name"abc":5', ':', ' ,;', '\"', 'INVALID') AS kv;
┌─kv──┐
│ {}  │
└─────┘

unexpected_quoting_character_strategy=accept

SELECT extractKeyValuePairs('name"abc:5', ':', ' ,;', '\"', 'ACCEPT') AS kv;
┌─kv────────────────┐
│ {'name"abc':'5'}  │
└───────────────────┘
SELECT extractKeyValuePairs('name"abc":5', ':', ' ,;', '\"', 'ACCEPT') AS kv;
┌─kv─────────────────┐
│ {'name"abc"':'5'}  │
└────────────────────┘

unexpected_quoting_character_strategy=promote

SELECT extractKeyValuePairs('name"abc:5', ':', ' ,;', '\"', 'PROMOTE') AS kv;
┌─kv──┐
│ {}  │
└─────┘
SELECT extractKeyValuePairs('name"abc":5', ':', ' ,;', '\"', 'PROMOTE') AS kv;
┌─kv───────────┐
│ {'abc':'5'}  │
└──────────────┘

Эскейп-последовательности без поддержки эскейп-последовательностей:

SELECT extractKeyValuePairs('age:a\\x0A\\n\\0') AS kv

Результат:

┌─kv─────────────────────┐
│ {'age':'a\\x0A\\n\\0'} │
└────────────────────────┘

Чтобы восстановить строку карты пар ключ-значение, сериализованную с помощью toString:

SELECT
    map('John', '33', 'Paula', '31') AS m,
    toString(m) AS map_serialized,
    extractKeyValuePairs(map_serialized, ':', ',', '\'') AS map_restored
FORMAT Vertical;

Результат:

Row 1:
──────
m:              {'John':'33','Paula':'31'}
map_serialized: {'John':'33','Paula':'31'}
map_restored:   {'John':'33','Paula':'31'}

extractKeyValuePairsWithEscaping

То же самое, что и extractKeyValuePairs, но поддерживает экранирование.

Поддерживаемые эскейп-последовательности: \x, \N, \a, \b, \e, \f, \n, \r, \t, \v и \0. Нестандартные эскейп-последовательности возвращаются как есть (включая обратный слэш), если только они не являются одним из следующих: \\, ', ", backtick, /, = или управляющие ASCII-символы (c <= 31).

Эта функция удовлетворит случай использования, когда предварительное экранирование и последующее экранирование неуместны. Например, рассмотрим следующую входную строку: a: "aaaa\"bbb". Ожидаемый вывод: a: aaaa\"bbbb.

  • Предварительное экранирование: При предварительном экранировании выход будет: a: "aaaa"bbb" и extractKeyValuePairs затем выдаст: a: aaaa
  • Последующее экранирование: extractKeyValuePairs выдаст a: aaaa\ и последующее экранирование оставит его без изменений.

Ведущие эскейп-последовательности будут пропущены в ключах и будут считаться недопустимыми для значений.

Примеры

Эскейп-последовательности с поддержкой эскейп-последовательностей:

SELECT extractKeyValuePairsWithEscaping('age:a\\x0A\\n\\0') AS kv

Результат:

┌─kv────────────────┐
│ {'age':'a\n\n\0'} │
└───────────────────┘

mapAdd

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

Синтаксис

mapAdd(arg1, arg2 [, ...])

Аргументы

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

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

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

Пример

Запрос с типом Map:

SELECT mapAdd(map(1,1), map(1,1));

Результат:

┌─mapAdd(map(1, 1), map(1, 1))─┐
│ {1:2}                        │
└──────────────────────────────┘

Запрос с кортежем:

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). Общий приведенный тип используется в качестве типа для результирующего массива.

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

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

Пример

Запрос с типом Map:

SELECT mapSubtract(map(1,1), map(1,1));

Результат:

┌─mapSubtract(map(1, 1), map(1, 1))─┐
│ {1:0}                             │
└───────────────────────────────────┘

Запрос с кортежем map:

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

Заполняет отсутствующие пары ключ-значение в карте с целочисленными ключами. Чтобы поддерживать расширение ключей за пределы наибольшего значения, можно указать максимальный ключ. Более конкретно, функция возвращает карту, в которой ключи образуют ряд от наименьшего до наибольшего ключа (или параметра max, если он указан) с шагом 1 и соответствующими значениями. Если значение не указано для ключа, используется значение по умолчанию. В случае повторяющихся ключей только первое значение (в порядке появления) ассоциируется с ключом.

Синтаксис

mapPopulateSeries(map[, max])
mapPopulateSeries(keys, values[, max])

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

Аргументы

Аргументы - Map или два Array, где первый и второй массивы содержат ключи и значения для каждого ключа.

Сопоставленные массивы:

  • map — Карта с целочисленными ключами. Map.

или

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

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

Пример

Запрос с типом Map:

SELECT mapPopulateSeries(map(1, 10, 5, 20), 6);

Результат:

┌─mapPopulateSeries(map(1, 10, 5, 20), 6)─┐
│ {1:10,2:0,3:0,4:0,5:20,6:0}             │
└─────────────────────────────────────────┘

Запрос с сопоставленными массивами:

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

mapKeys

Возвращает ключи заданной карты.

Эта функция может быть оптимизирована, включив настройку optimize_functions_to_subcolumns. При включенной настройке функция читает только подколонку keys вместо всей карты. Запрос SELECT mapKeys(m) FROM table преобразуется в SELECT m.keys FROM table.

Синтаксис

mapKeys(map)

Аргументы

  • map — Map. Map.

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

  • Массив, содержащий все ключи из map. Array.

Пример

Запрос:

CREATE TABLE tab (a Map(String, String)) ENGINE = Memory;

INSERT INTO tab VALUES ({'name':'eleven','age':'11'}), ({'number':'twelve','position':'6.0'});

SELECT mapKeys(a) FROM tab;

Результат:

┌─mapKeys(a)────────────┐
│ ['name','age']        │
│ ['number','position'] │
└───────────────────────┘

mapContains

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

Синтаксис

mapContains(map, key)

Псевдоним: mapContainsKey(map, key)

Аргументы

  • map — Map. Map.
  • key — Ключ. Тип должен соответствовать типу ключа map.

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

  • 1, если map содержит key, 0, если нет. UInt8.

Пример

Запрос:

CREATE TABLE tab (a Map(String, String)) ENGINE = Memory;

INSERT INTO tab VALUES ({'name':'eleven','age':'11'}), ({'number':'twelve','position':'6.0'});

SELECT mapContains(a, 'name') FROM tab;

Результат:

┌─mapContains(a, 'name')─┐
│                      1 │
│                      0 │
└────────────────────────┘

mapContainsKeyLike

Синтаксис

mapContainsKeyLike(map, pattern)

Аргументы

  • map — Map. Map.
  • pattern - Шаблон строки для сопоставления.

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

  • 1, если map содержит key, соответствующий указанному шаблону, 0, если нет.

Пример

Запрос:

CREATE TABLE tab (a Map(String, String)) ENGINE = Memory;

INSERT INTO tab VALUES ({'abc':'abc','def':'def'}), ({'hij':'hij','klm':'klm'});

SELECT mapContainsKeyLike(a, 'a%') FROM tab;

Результат:

┌─mapContainsKeyLike(a, 'a%')─┐
│                           1 │
│                           0 │
└─────────────────────────────┘

mapExtractKeyLike

Данная функция возвращает карту с элементами, где ключ соответствует шаблону, для карты со строковыми ключами и шаблоном LIKE.

Синтаксис

mapExtractKeyLike(map, pattern)

Аргументы

  • map — Map. Map.
  • pattern - Шаблон строки для сопоставления.

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

  • Карта, содержащая элементы, ключи которых соответствуют указанному шаблону. Если элементы не соответствуют шаблону, возвращается пустая карта.

Пример

Запрос:

CREATE TABLE tab (a Map(String, String)) ENGINE = Memory;

INSERT INTO tab VALUES ({'abc':'abc','def':'def'}), ({'hij':'hij','klm':'klm'});

SELECT mapExtractKeyLike(a, 'a%') FROM tab;

Результат:

┌─mapExtractKeyLike(a, 'a%')─┐
│ {'abc':'abc'}              │
│ {}                         │
└────────────────────────────┘

mapValues

Возвращает значения данной карты.

Эта функция может быть оптимизирована, включив настройку optimize_functions_to_subcolumns. При включенной настройке функция читает только подколонку values вместо всей карты. Запрос SELECT mapValues(m) FROM table преобразуется в SELECT m.values FROM table.

Синтаксис

mapValues(map)

Аргументы

  • map — Map. Map.

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

  • Массив, содержащий все значения из map. Array.

Пример

Запрос:

CREATE TABLE tab (a Map(String, String)) ENGINE = Memory;

INSERT INTO tab VALUES ({'name':'eleven','age':'11'}), ({'number':'twelve','position':'6.0'});

SELECT mapValues(a) FROM tab;

Результат:

┌─mapValues(a)─────┐
│ ['eleven','11']  │
│ ['twelve','6.0'] │
└──────────────────┘

mapContainsValue

Возвращает, содержится ли данное значение в данной карте.

Синтаксис

mapContainsValue(map, value)

Псевдоним: mapContainsValue(map, value)

Аргументы

  • map — Map. Map.
  • value — Значение. Тип должен соответствовать типу значения map.

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

  • 1, если map содержит value, 0, если нет. UInt8.

Пример

Запрос:

CREATE TABLE tab (a Map(String, String)) ENGINE = Memory;

INSERT INTO tab VALUES ({'name':'eleven','age':'11'}), ({'number':'twelve','position':'6.0'});

SELECT mapContainsValue(a, '11') FROM tab;

Результат:

┌─mapContainsValue(a, '11')─┐
│                         1 │
│                         0 │
└───────────────────────────┘

mapContainsValueLike

Синтаксис

mapContainsValueLike(map, pattern)

Аргументы

  • map — Map. Map.
  • pattern - Шаблон строки для сопоставления.

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

  • 1, если map содержит value, соответствующий указанному шаблону, 0, если нет.

Пример

Запрос:

CREATE TABLE tab (a Map(String, String)) ENGINE = Memory;

INSERT INTO tab VALUES ({'abc':'abc','def':'def'}), ({'hij':'hij','klm':'klm'});

SELECT mapContainsValueLike(a, 'a%') FROM tab;

Результат:

┌─mapContainsV⋯ke(a, 'a%')─┐
│                        1 │
│                        0 │
└──────────────────────────┘

mapExtractValueLike

Данная функция возвращает карту с элементами, где значение соответствует шаблону, для карты со строковыми значениями и шаблоном LIKE.

Синтаксис

mapExtractValueLike(map, pattern)

Аргументы

  • map — Map. Map.
  • pattern - Шаблон строки для сопоставления.

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

  • Карта, содержащая элементы, значения которых соответствуют указанному шаблону. Если элементы не соответствуют шаблону, возвращается пустая карта.

Пример

Запрос:

CREATE TABLE tab (a Map(String, String)) ENGINE = Memory;

INSERT INTO tab VALUES ({'abc':'abc','def':'def'}), ({'hij':'hij','klm':'klm'});

SELECT mapExtractValueLike(a, 'a%') FROM tab;

Результат:

┌─mapExtractValueLike(a, 'a%')─┐
│ {'abc':'abc'}                │
│ {}                           │
└──────────────────────────────┘

mapApply

Применяет функцию к каждому элементу карты.

Синтаксис

mapApply(func, map)

Аргументы

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

  • Возвращает карту, полученную из исходной карты путем применения func(map1[i], ..., mapN[i]) для каждого элемента.

Пример

Запрос:

SELECT mapApply((k, v) -> (k, v * 10), _map) AS r
FROM
(
    SELECT map('key1', number, 'key2', number * 2) AS _map
    FROM numbers(3)
)

Результат:

┌─r─────────────────────┐
│ {'key1':0,'key2':0}   │
│ {'key1':10,'key2':20} │
│ {'key1':20,'key2':40} │
└───────────────────────┘

mapFilter

Фильтрует карту путем применения функции к каждому элементу карты.

Синтаксис

mapFilter(func, map)

Аргументы

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

  • Возвращает карту, содержащую только элементы из map, для которых func(map1[i], ..., mapN[i]) возвращает что-то, отличное от 0.

Пример

Запрос:

SELECT mapFilter((k, v) -> ((v % 2) = 0), _map) AS r
FROM
(
    SELECT map('key1', number, 'key2', number * 2) AS _map
    FROM numbers(3)
)

Результат:

┌─r───────────────────┐
│ {'key1':0,'key2':0} │
│ {'key2':2}          │
│ {'key1':2,'key2':4} │
└─────────────────────┘

mapUpdate

Синтаксис

mapUpdate(map1, map2)

Аргументы

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

  • Возвращает map1 с обновленными значениями по соответствующим ключам в map2.

Пример

Запрос:

SELECT mapUpdate(map('key1', 0, 'key3', 0), map('key1', 10, 'key2', 10)) AS map;

Результат:

┌─map────────────────────────────┐
│ {'key3':0,'key1':10,'key2':10} │
└────────────────────────────────┘

mapConcat

Конкатенирует несколько карт на основе равенства их ключей. Если элементы с одинаковым ключом существуют в более чем одной входной карте, все элементы добавляются в результирующую карту, но только первый из них доступен через оператор [].

Синтаксис

mapConcat(maps)

Аргументы

  • maps – Произвольное количество Maps.

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

  • Возвращает карту с конкатенированными картами, переданными в качестве аргументов.

Примеры

Запрос:

SELECT mapConcat(map('key1', 1, 'key3', 3), map('key2', 2)) AS map;

Результат:

┌─map──────────────────────────┐
│ {'key1':1,'key3':3,'key2':2} │
└──────────────────────────────┘

Запрос:

SELECT mapConcat(map('key1', 1, 'key2', 2), map('key1', 3)) AS map, map['key1'];

Результат:

┌─map──────────────────────────┬─elem─┐
│ {'key1':1,'key2':2,'key1':3} │    1 │
└──────────────────────────────┴──────┘

mapExists([func,], map)

Возвращает 1, если существует хотя бы одна пара ключ-значение в map, для которой func(key, value) возвращает что-то, отличное от 0. В противном случае возвращает 0.

примечание

mapExists является высшего порядка функцией. Вы можете передать лямбда-функцию в качестве первого аргумента.

Пример

Запрос:

SELECT mapExists((k, v) -> (v = 1), map('k1', 1, 'k2', 2)) AS res

Результат:

┌─res─┐
│   1 │
└─────┘

mapAll([func,] map)

Возвращает 1, если func(key, value) возвращает что-то, отличное от 0 для всех пар ключ-значение в map. В противном случае возвращает 0.

примечание

Обратите внимание, что mapAll является высшего порядка функцией. Вы можете передать лямбда-функцию в качестве первого аргумента.

Пример

Запрос:

SELECT mapAll((k, v) -> (v = 1), map('k1', 1, 'k2', 2)) AS res

Результат:

┌─res─┐
│   0 │
└─────┘

mapSort([func,], map)

Сортирует элементы карты в порядке возрастания. Если функция func указана, порядок сортировки определяется результатом применения функции func к ключам и значениям карты.

Примеры

SELECT mapSort(map('key2', 2, 'key3', 1, 'key1', 3)) AS map;
┌─map──────────────────────────┐
│ {'key1':3,'key2':2,'key3':1} │
└──────────────────────────────┘
SELECT mapSort((k, v) -> v, map('key2', 2, 'key3', 1, 'key1', 3)) AS map;
┌─map──────────────────────────┐
│ {'key3':1,'key2':2,'key1':3} │
└──────────────────────────────┘

Для получения дополнительной информации см. справку для функции arraySort.

mapPartialSort

Сортирует элементы карты в порядке возрастания с дополнительным аргументом limit, позволяющим частичную сортировку. Если функция func указана, порядок сортировки определяется результатом применения функции func к ключам и значениям карты.

Синтаксис

mapPartialSort([func,] limit, map)

Аргументы

  • func – Необязательная функция для применения к ключам и значениям карты. Лямбда-функция.
  • limit – Элементы в диапазоне [1..limit] сортируются. (U)Int.
  • map – Карта для сортировки. Map.

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

  • Частично отсортированная карта. Map.

Пример

SELECT mapPartialSort((k, v) -> v, 2, map('k1', 3, 'k2', 1, 'k3', 2));
┌─mapPartialSort(lambda(tuple(k, v), v), 2, map('k1', 3, 'k2', 1, 'k3', 2))─┐
│ {'k2':1,'k3':2,'k1':3}                                                    │
└───────────────────────────────────────────────────────────────────────────┘

mapReverseSort([func,], map)

Сортирует элементы карты в порядке убывания. Если функция func указана, порядок сортировки определяется результатом применения функции func к ключам и значениям карты.

Примеры

SELECT mapReverseSort(map('key2', 2, 'key3', 1, 'key1', 3)) AS map;
┌─map──────────────────────────┐
│ {'key3':1,'key2':2,'key1':3} │
└──────────────────────────────┘
SELECT mapReverseSort((k, v) -> v, map('key2', 2, 'key3', 1, 'key1', 3)) AS map;
┌─map──────────────────────────┐
│ {'key1':3,'key2':2,'key3':1} │
└──────────────────────────────┘

Для получения дополнительной информации см. функцию arrayReverseSort.

mapPartialReverseSort

Сортирует элементы карты в порядке убывания с дополнительным аргументом limit, позволяющим частичную сортировку. Если функция func указана, порядок сортировки определяется результатом применения функции func к ключам и значениям карты.

Синтаксис

mapPartialReverseSort([func,] limit, map)

Аргументы

  • func – Необязательная функция для применения к ключам и значениям карты. Лямбда-функция.
  • limit – Элементы в диапазоне [1..limit] сортируются. (U)Int.
  • map – Карта для сортировки. Map.

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

  • Частично отсортированная карта. Map.

Пример

SELECT mapPartialReverseSort((k, v) -> v, 2, map('k1', 3, 'k2', 1, 'k3', 2));
┌─mapPartialReverseSort(lambda(tuple(k, v), v), 2, map('k1', 3, 'k2', 1, 'k3', 2))─┐
│ {'k1':3,'k3':2,'k2':1}                                                           │
└──────────────────────────────────────────────────────────────────────────────────┘