> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8a08bda2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Документация по функциям для Tuple и Map

# Функции Map

{/*AUTOGENERATED_START*/}

<div id="extractKeyValuePairs">
  ## extractKeyValuePairs
</div>

Добавленный в: v23.4.0

Извлекает пары ключ-значение из любой строки. Строка не обязана быть полностью структурирована в формате ключ-значение;

Он может содержать шум (например, файлы журналов). Формат пар ключ-значение для интерпретации задаётся через аргументы функции.

Пара ключ-значение состоит из ключа, за которым следует `key_value_delimiter`, и значения. Ключи и значения в кавычках также поддерживаются. Пары ключ-значение должны разделяться разделителями пар.

**Синтаксис**

```sql theme={null}
extractKeyValuePairs(data, [key_value_delimiter], [pair_delimiter], [quoting_character])
```

**Аргументы**

* `data` — строка, из которой извлекаются пары «ключ-значение». [String](/ru/reference/data-types/string) или [FixedString](/ru/reference/data-types/fixedstring).
  * `key_value_delimiter` - Символ, используемый в качестве разделителя между ключом и значением. По умолчанию `:`. [String](/ru/reference/data-types/string) или [FixedString](/ru/reference/data-types/fixedstring).
  * `pair_delimiters` - Набор символов, используемых в качестве разделителей между парами. По умолчанию `\space`, `,` и `;`. [String](/ru/reference/data-types/string) или [FixedString](/ru/reference/data-types/fixedstring).
  * `quoting_character` - Символ, используемый в качестве символа кавычек. По умолчанию `"`. [String](/ru/reference/data-types/string) или [FixedString](/ru/reference/data-types/fixedstring).
  * `unexpected_quoting_character_strategy` - Стратегия обработки символов кавычек в неожиданных местах на этапе `read_key` и `read_value`. Возможные значения: `invalid`, `accept` и `promote`. `invalid` отбрасывает ключ/значение и возвращает в состояние `WAITING_KEY`. `accept` рассматривает его как обычный символ. `promote` переводит в состояние `READ_QUOTED_{KEY/VALUE}` и начинает со следующего символа. Значение по умолчанию — `INVALID`

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

* Извлечённые пары «ключ-значение» в `Map(String, String)`.

**Примеры**

Запрос:

**Простой случай**

```sql theme={null}
arthur :) select extractKeyValuePairs('name:neymar, age:31 team:psg,nationality:brazil') as kv

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

            Query id: f9e0ca6f-3178-4ee2-aa2c-a5517abb9cee

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

**Одинарная кавычка в качестве символа кавычки**

```sql theme={null}
arthur :) select extractKeyValuePairs('name:\'neymar\';\'age\':31;team:psg;nationality:brazil,last_key:last_value', ':', ';,', '\'') as kv

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

            Query id: 0e22bf6b-9844-414a-99dc-32bf647abd5e

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

Примеры unexpected\_quoting\_character\_strategy:

unexpected\_quoting\_character\_strategy=invalid

```sql theme={null}
SELECT extractKeyValuePairs('name"abc:5', ':', ' ,;', '\"', 'INVALID') as kv;
```

```text theme={null}
┌─kv────────────────┐
            │ {'abc':'5'}  │
            └───────────────────┘
```

```sql theme={null}
SELECT extractKeyValuePairs('name"abc":5', ':', ' ,;', '\"', 'INVALID') as kv;
```

```text theme={null}
┌─kv──┐
            │ {}  │
            └─────┘
```

unexpected\_quoting\_character\_strategy=accept

```sql theme={null}
SELECT extractKeyValuePairs('name"abc:5', ':', ' ,;', '\"', 'ACCEPT') as kv;
```

```text theme={null}
┌─kv────────────────┐
            │ {'name"abc':'5'}  │
            └───────────────────┘
```

```sql theme={null}
            SELECT extractKeyValuePairs('name"abc":5', ':', ' ,;', '\"', 'ACCEPT') as kv;
```

```text theme={null}
            ┌─kv─────────────────┐
            │ {'name"abc"':'5'}  │
            └────────────────────┘
```

unexpected\_quoting\_character\_strategy=promote

```sql theme={null}
            SELECT extractKeyValuePairs('name"abc:5', ':', ' ,;', '\"', 'PROMOTE') as kv;
```

```text theme={null}
            ┌─kv──┐
            │ {}  │
            └─────┘
```

```sql theme={null}
            SELECT extractKeyValuePairs('name"abc":5', ':', ' ,;', '\"', 'PROMOTE') as kv;
```

```text theme={null}
            ┌─kv───────────┐
            │ {'abc':'5'}  │
            └──────────────┘
```

**Управляющие последовательности без их поддержки**

```sql theme={null}
            arthur :) select extractKeyValuePairs('age:a\\x0A\\n\\0') as kv

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

            Query id: e9fd26ee-b41f-4a11-b17f-25af6fd5d356

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

**Синтаксис**

```sql theme={null}
extractKeyValuePairs(input)
```

**Псевдонимы**: `str_to_map`, `mapFromString`

**Аргументы**

* Отсутствуют.

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

**Примеры**

<div id="extractKeyValuePairsWithEscaping">
  ## extractKeyValuePairsWithEscaping
</div>

Добавленный в: v23.4.0

То же, что и `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\`, а последующее экранирование оставит это без изменений.

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

**Экранирующие последовательности при включенной поддержке экранирования**

```sql theme={null}
            arthur :) select extractKeyValuePairsWithEscaping('age:a\\x0A\\n\\0') as kv

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

            Query id: 44c114f0-5658-4c75-ab87-4574de3a1645

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

**Синтаксис**

```sql theme={null}
extractKeyValuePairsWithEscaping(input)
```

**Аргументы**

* Отсутствуют.

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

**Примеры**

<div id="map">
  ## map
</div>

Добавленный в: v21.1.0

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

**Синтаксис**

```sql theme={null}
map(key1, value1[, key2, value2, ...])
```

**Аргументы**

* `key_n` — Ключи элементов типа Map. [`Any`](/ru/reference/data-types)
* `value_n` — Значения элементов типа Map. [`Any`](/ru/reference/data-types)

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

Возвращает значение типа Map, содержащее пары ключ:значение. [`Map(Any, Any)`](/ru/reference/data-types/map)

**Примеры**

**Пример использования**

```sql title=Query theme={null}
SELECT map('key1', number, 'key2', number * 2) FROM numbers(3)
```

```response title=Response theme={null}
{'key1':0,'key2':0}
{'key1':1,'key2':2}
{'key1':2,'key2':4}
```

<div id="mapAdd">
  ## mapAdd
</div>

Добавленный в: v20.7.0

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

**Синтаксис**

```sql theme={null}
mapAdd(arg1[, arg2, ...])
```

**Аргументы**

* `arg1[, arg2, ...]` — объекты типа Map или Tuple из двух массивов, в которых элементы первого массива представляют ключи, а второй массив содержит значения для каждого ключа. [`Map(K, V)`](/ru/reference/data-types/map) или [`Tuple(Array(T), Array(T))`](/ru/reference/data-types/tuple)

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

Возвращает Map или Tuple, где первый массив содержит отсортированные ключи, а второй массив — значения. [`Map(K, V)`](/ru/reference/data-types/map) или [`Tuple(Array(T), Array(T))`](/ru/reference/data-types/tuple)

**Примеры**

**С типом Map**

```sql title=Query theme={null}
SELECT mapAdd(map(1, 1), map(1, 1))
```

```response title=Response theme={null}
{1:2}
```

**С использованием кортежа**

```sql title=Query theme={null}
SELECT mapAdd(([toUInt8(1), 2], [1, 1]), ([toUInt8(1), 2], [1, 1]))
```

```response title=Response theme={null}
([1, 2], [2, 2])
```

<div id="mapAll">
  ## mapAll
</div>

Добавленный в: v23.4.0

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

**Синтаксис**

```sql theme={null}
mapAll([func,] map)
```

**Аргументы**

* `func` — лямбда-функция. [`лямбда-функция`](/ru/reference/functions/regular-functions/overview#arrow-operator-and-lambda)
* `map` — проверяемый Map. [`Map(K, V)`](/ru/reference/data-types/map)

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

Возвращает `1`, если все пары ключ-значение удовлетворяют условию, иначе — `0`. [`UInt8`](/ru/reference/data-types/int-uint)

**Примеры**

**Пример использования**

```sql title=Query theme={null}
SELECT mapAll((k, v) -> v = 1, map('k1', 1, 'k2', 2))
```

```response title=Response theme={null}
0
```

<div id="mapApply">
  ## mapApply
</div>

Добавленный в: v22.3.0

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

**Синтаксис**

```sql theme={null}
mapApply(func, map)
```

**Аргументы**

* `func` — Лямбда-функция. [`Лямбда-функция`](/ru/reference/functions/regular-functions/overview#arrow-operator-and-lambda)
* `map` — Map, к которому нужно применить функцию. [`Map(K, V)`](/ru/reference/data-types/map)

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

Возвращает новый Map, полученный из исходного применением `func` к каждому элементу. [`Map(K, V)`](/ru/reference/data-types/map)

**Примеры**

**Пример использования**

```sql title=Query theme={null}
SELECT mapApply((k, v) -> (k, v * 2), map('k1', 1, 'k2', 2))
```

```response title=Response theme={null}
{'k1':2,'k2':4}
```

<div id="mapConcat">
  ## mapConcat
</div>

Добавленный в: v23.4.0

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

**Синтаксис**

```sql theme={null}
mapConcat(maps)
```

**Аргументы**

* `maps` — Произвольное количество значений типа Map. [`Map`](/ru/reference/data-types/map)

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

Возвращает значение типа Map, полученное объединением Map, переданных в качестве аргументов. [`Map`](/ru/reference/data-types/map)

**Примеры**

**Пример использования**

```sql title=Query theme={null}
SELECT mapConcat(map('k1', 'v1'), map('k2', 'v2'))
```

```response title=Response theme={null}
{'k1':'v1','k2':'v2'}
```

<div id="mapContainsKey">
  ## mapContainsKey
</div>

Добавленный в: v21.2.0

Определяет, содержится ли ключ в Map.

**Синтаксис**

```sql theme={null}
mapContainsKey(map, key)
```

**Псевдонимы**: `mapContains`

**Аргументы**

* `map` — Объект Map, в котором выполняется поиск. [`Map(K, V)`](/ru/reference/data-types/map)
* `key` — Ключ, который нужно найти. Тип должен совпадать с типом ключа в Map. [`Any`](/ru/reference/data-types)

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

Возвращает 1, если Map содержит ключ, и 0 в противном случае. [`UInt8`](/ru/reference/data-types/int-uint)

**Примеры**

**Пример использования**

```sql title=Query theme={null}
SELECT mapContainsKey(map('k1', 'v1', 'k2', 'v2'), 'k1')
```

```response title=Response theme={null}
1
```

<div id="mapContainsKeyLike">
  ## mapContainsKeyLike
</div>

Добавленный в: v23.4.0

Проверяет, содержит ли Map ключ, соответствующий указанному шаблону `LIKE`.

**Синтаксис**

```sql theme={null}
mapContainsKeyLike(map, pattern)
```

**Аргументы**

* `map` — Map, в котором выполняется поиск. [`Map(K, V)`](/ru/reference/data-types/map)
* `pattern` — Шаблон регулярного выражения, с которым сопоставляются ключи. [`const String`](/ru/reference/data-types/string)

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

Возвращает `1`, если `map` содержит ключ, соответствующий `pattern`, иначе — `0`. [`UInt8`](/ru/reference/data-types/int-uint)

**Примеры**

**Пример использования**

```sql title=Query theme={null}
CREATE TABLE tab (a Map(String, String))
ENGINE = MergeTree
ORDER BY tuple();

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

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

```response title=Response theme={null}
┌─mapContainsKeyLike(a, 'a%')─┐
│                           1 │
│                           0 │
└─────────────────────────────┘
```

<div id="mapContainsValue">
  ## mapContainsValue
</div>

Добавленный в: v25.6.0

Определяет, содержится ли значение в Map.

**Синтаксис**

```sql theme={null}
mapContainsValue(map, value)
```

**Аргументы**

* `map` — Map, в которой выполняется поиск. [`Map(K, V)`](/ru/reference/data-types/map)
* `value` — Искомое значение. Тип должен совпадать с типом значений в `map`. [`Any`](/ru/reference/data-types)

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

Возвращает `1`, если `map` содержит `value`, и `0` — в противном случае. [`UInt8`](/ru/reference/data-types/int-uint)

**Примеры**

**Пример использования**

```sql title=Query theme={null}
SELECT mapContainsValue(map('k1', 'v1', 'k2', 'v2'), 'v1')
```

```response title=Response theme={null}
1
```

<div id="mapContainsValueLike">
  ## mapContainsValueLike
</div>

Добавленный в: v25.5.0

Проверяет, содержит ли Map значение, соответствующее указанному шаблону `LIKE`.

**Синтаксис**

```sql theme={null}
mapContainsValueLike(map, pattern)
```

**Аргументы**

* `map` — Map, в которой выполняется поиск. [`Map(K, V)`](/ru/reference/data-types/map)
* `pattern` — Шаблон регулярного выражения для сопоставления со значениями. [`const String`](/ru/reference/data-types/string)

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

Возвращает `1`, если `map` содержит значение, соответствующее `pattern`, в противном случае — `0`. [`UInt8`](/ru/reference/data-types/int-uint)

**Примеры**

**Пример использования**

```sql title=Query theme={null}
CREATE TABLE tab (a Map(String, String))
ENGINE = MergeTree
ORDER BY tuple();

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

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

```response title=Response theme={null}
┌─mapContainsV⋯ke(a, 'a%')─┐
│                        1 │
│                        0 │
└──────────────────────────┘
```

<div id="mapExists">
  ## mapExists
</div>

Добавленный в: v23.4.0

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

**Синтаксис**

```sql theme={null}
mapExists([func,] map)
```

**Аргументы**

* `func` — Необязательный. Лямбда-функция. [`лямбда-функция`](/ru/reference/functions/regular-functions/overview#arrow-operator-and-lambda)
* `map` — Проверяемое значение типа Map. [`Map(K, V)`](/ru/reference/data-types/map)

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

Возвращает `1`, если хотя бы одна пара ключ-значение удовлетворяет условию, в противном случае — `0`. [`UInt8`](/ru/reference/data-types/int-uint)

**Примеры**

**Пример использования**

```sql title=Query theme={null}
SELECT mapExists((k, v) -> v = 1, map('k1', 1, 'k2', 2))
```

```response title=Response theme={null}
1
```

<div id="mapExtractKeyLike">
  ## mapExtractKeyLike
</div>

Добавленный в: v23.4.0

Принимает map со строковыми ключами и шаблон `LIKE`, а возвращает map с элементами, ключи которых соответствуют шаблону.

**Синтаксис**

```sql theme={null}
mapExtractKeyLike(map, pattern)
```

**Аргументы**

* `map` — Map, из которого извлекаются данные. [`Map(K, V)`](/ru/reference/data-types/map)
* `pattern` — Шаблон регулярного выражения, с которым сопоставляются ключи. [`const String`](/ru/reference/data-types/string)

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

Возвращает Map, содержащий элементы, ключи которых соответствуют указанному шаблону регулярного выражения. Если ни один элемент не соответствует шаблону регулярного выражения, возвращается пустой Map. [`Map(K, V)`](/ru/reference/data-types/map)

**Примеры**

**Пример использования**

```sql title=Query theme={null}
CREATE TABLE tab (a Map(String, String))
ENGINE = MergeTree
ORDER BY tuple();

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

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

```response title=Response theme={null}
┌─mapExtractKeyLike(a, 'a%')─┐
│ {'abc':'abc'}              │
│ {}                         │
└────────────────────────────┘
```

<div id="mapExtractValueLike">
  ## mapExtractValueLike
</div>

Добавленный в: v25.5.0

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

**Синтаксис**

```sql theme={null}
mapExtractValueLike(map, pattern)
```

**Аргументы**

* `map` — Map, из которого извлекаются данные. [`Map(K, V)`](/ru/reference/data-types/map)
* `pattern` — Шаблон регулярного выражения для сопоставления со значениями. [`const String`](/ru/reference/data-types/string)

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

Возвращает map, содержащий элементы, значения которых соответствуют указанному шаблону регулярного выражения. Если ни один элемент не соответствует шаблону регулярного выражения, возвращается пустой map. [`Map(K, V)`](/ru/reference/data-types/map)

**Примеры**

**Пример использования**

```sql title=Query theme={null}
CREATE TABLE tab (a Map(String, String))
ENGINE = MergeTree
ORDER BY tuple();

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

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

```response title=Response theme={null}
┌─mapExtractValueLike(a, 'a%')─┐
│ {'abc':'abc'}                │
│ {}                           │
└──────────────────────────────┘
```

<div id="mapFilter">
  ## mapFilter
</div>

Добавленный в: v22.3.0

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

**Синтаксис**

```sql theme={null}
mapFilter(func, map)
```

**Аргументы**

* `func` — лямбда-функция. [`лямбда-функция`](/ru/reference/functions/regular-functions/overview#arrow-operator-and-lambda)
* `map` — `Map`, который нужно отфильтровать. [`Map(K, V)`](/ru/reference/data-types/map)

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

Возвращает `Map`, содержащий только те элементы, для которых `func` возвращает значение, отличное от `0`. [`Map(K, V)`](/ru/reference/data-types/map)

**Примеры**

**Пример использования**

```sql title=Query theme={null}
SELECT mapFilter((k, v) -> v > 1, map('k1', 1, 'k2', 2))
```

```response title=Response theme={null}
{'k2':2}
```

<div id="mapFromArrays">
  ## mapFromArrays
</div>

Добавленный в: v23.3.0

Создает map из массива или map ключей и массива или map значений.
Функция служит удобной альтернативой синтаксису `CAST([...], 'Map(key_type, value_type)')`.

**Синтаксис**

```sql theme={null}
mapFromArrays(keys, values)
```

**Псевдонимы**: `MAP_FROM_ARRAYS`

**Аргументы**

* `keys` — Массив или Map ключей, из которых создаётся карта. [`Array`](/ru/reference/data-types/array) или [`Map`](/ru/reference/data-types/map)
* `values` — Массив или Map значений, из которых создаётся карта. [`Array`](/ru/reference/data-types/array) или [`Map`](/ru/reference/data-types/map)

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

Возвращает карту с ключами и значениями, сформированную из массива ключей и массива/карты значений. [`Map`](/ru/reference/data-types/map)

**Примеры**

**Базовое использование**

```sql title=Query theme={null}
SELECT mapFromArrays(['a', 'b', 'c'], [1, 2, 3])
```

```response title=Response theme={null}
{'a':1,'b':2,'c':3}
```

**Для входных данных типа Map**

```sql title=Query theme={null}
SELECT mapFromArrays([1, 2, 3], map('a', 1, 'b', 2, 'c', 3))
```

```response title=Response theme={null}
{1:('a', 1), 2:('b', 2), 3:('c', 3)}
```

<div id="mapKeys">
  ## mapKeys
</div>

Добавленный в: v21.2.0

Возвращает ключи заданного Map.
Эту функцию можно оптимизировать, включив настройку [`optimize_functions_to_subcolumns`](/ru/reference/settings/session-settings#optimize_functions_to_subcolumns).
Когда настройка включена, функция считывает только подстолбец `keys`, а не весь Map.
Запрос `SELECT mapKeys(m) FROM table` преобразуется в `SELECT m.keys FROM table`.

**Синтаксис**

```sql theme={null}
mapKeys(map)
```

**Аргументы**

* `map` — Map, из которого извлекаются ключи. [`Map(K, V)`](/ru/reference/data-types/map)

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

Возвращает массив, содержащий все ключи карты. [`Array(T)`](/ru/reference/data-types/array)

**Примеры**

**Пример использования**

```sql title=Query theme={null}
SELECT mapKeys(map('k1', 'v1', 'k2', 'v2'))
```

```response title=Response theme={null}
['k1','k2']
```

<div id="mapPartialReverseSort">
  ## mapPartialReverseSort
</div>

Добавленный в: v23.4.0

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

**Синтаксис**

```sql theme={null}
mapPartialReverseSort([func,] limit, map)
```

**Аргументы**

* `func` — Необязательный параметр. Лямбда-функция. [`Лямбда-функция`](/ru/reference/functions/regular-functions/overview#arrow-operator-and-lambda)
* `limit` — Сортируются элементы в диапазоне `[1..limit]`. [`(U)Int*`](/ru/reference/data-types/int-uint)
* `map` — Сортируемый Map. [`Map(K, V)`](/ru/reference/data-types/map)

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

Возвращает частично отсортированный Map в порядке убывания. [`Map(K, V)`](/ru/reference/data-types/map)

**Примеры**

**Пример использования**

```sql title=Query theme={null}
SELECT mapPartialReverseSort((k, v) -> v, 2, map('k1', 3, 'k2', 1, 'k3', 2))
```

```response title=Response theme={null}
{'k1':3,'k3':2,'k2':1}
```

<div id="mapPartialSort">
  ## mapPartialSort
</div>

Добавленный в: v23.4.0

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

**Синтаксис**

```sql theme={null}
mapPartialSort([func,] limit, map)
```

**Аргументы**

* `func` — Необязательный. Лямбда-функция. [`лямбда-функция`](/ru/reference/functions/regular-functions/overview#arrow-operator-and-lambda)
* `limit` — Сортируются элементы в диапазоне `[1..limit]`. [`(U)Int*`](/ru/reference/data-types/int-uint)
* `map` — Сортируемое значение типа Map. [`Map(K, V)`](/ru/reference/data-types/map)

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

Возвращает частично отсортированное значение типа Map. [`Map(K, V)`](/ru/reference/data-types/map)

**Примеры**

**Пример использования**

```sql title=Query theme={null}
SELECT mapPartialSort((k, v) -> v, 2, map('k1', 3, 'k2', 1, 'k3', 2))
```

```response title=Response theme={null}
{'k2':1,'k3':2,'k1':3}
```

<div id="mapPopulateSeries">
  ## mapPopulateSeries
</div>

Добавленный в: v20.10.0

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

**Синтаксис**

```sql theme={null}
mapPopulateSeries(map[, max]) | mapPopulateSeries(keys, values[, max])
```

**Аргументы**

* `map` — Значение типа Map с целочисленными ключами. [`Map((U)Int*, V)`](/ru/reference/data-types/map)
* `keys` — Массив ключей. [`Array(T)`](/ru/reference/data-types/array)
* `values` — Массив значений. [`Array(T)`](/ru/reference/data-types/array)
* `max` — Необязательный параметр. Максимальное значение ключа. [`Int8`](/ru/reference/data-types/int-uint) или [`Int16`](/ru/reference/data-types/int-uint) или [`Int32`](/ru/reference/data-types/int-uint) или [`Int64`](/ru/reference/data-types/int-uint) или [`Int128`](/ru/reference/data-types/int-uint) или [`Int256`](/ru/reference/data-types/int-uint)

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

Возвращает Map или кортеж из двух массивов, где первый содержит ключи в отсортированном порядке, а второй — значения для соответствующих ключей. [`Map(K, V)`](/ru/reference/data-types/map) или [`Tuple(Array(UInt*), Array(Any))`](/ru/reference/data-types/tuple)

**Примеры**

**С типом Map**

```sql title=Query theme={null}
SELECT mapPopulateSeries(map(1, 10, 5, 20), 6)
```

```response title=Response theme={null}
{1:10, 2:0, 3:0, 4:0, 5:20, 6:0}
```

**С преобразованными массивами**

```sql title=Query theme={null}
SELECT mapPopulateSeries([1, 2, 4], [11, 22, 44], 5)
```

```response title=Response theme={null}
([1, 2, 3, 4, 5], [11, 22, 0, 44, 0])
```

<div id="mapReverseSort">
  ## mapReverseSort
</div>

Добавленный в: v23.4.0

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

**Синтаксис**

```sql theme={null}
mapReverseSort([func,] map)
```

**Аргументы**

* `func` — Необязательный. Лямбда-функция. [`Лямбда-функция`](/ru/reference/functions/regular-functions/overview#arrow-operator-and-lambda)
* `map` — Map, который нужно отсортировать. [`Map(K, V)`](/ru/reference/data-types/map)

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

Возвращает Map, отсортированный по убыванию. [`Map(K, V)`](/ru/reference/data-types/map)

**Примеры**

**Пример использования**

```sql title=Query theme={null}
SELECT mapReverseSort((k, v) -> v, map('k1', 3, 'k2', 1, 'k3', 2))
```

```response title=Response theme={null}
{'k1':3,'k3':2,'k2':1}
```

<div id="mapSort">
  ## mapSort
</div>

Добавленный в: v23.4.0

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

**Синтаксис**

```sql theme={null}
mapSort([func,] map)
```

**Аргументы**

* `func` — Необязательный. Лямбда-функция. [`Лямбда-функция`](/ru/reference/functions/regular-functions/overview#arrow-operator-and-lambda)
* `map` — Map, которую нужно отсортировать. [`Map(K, V)`](/ru/reference/data-types/map)

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

Возвращает Map, отсортированную по возрастанию. [`Map(K, V)`](/ru/reference/data-types/map)

**Примеры**

**Пример использования**

```sql title=Query theme={null}
SELECT mapSort((k, v) -> v, map('k1', 3, 'k2', 1, 'k3', 2))
```

```response title=Response theme={null}
{'k2':1,'k3':2,'k1':3}
```

<div id="mapSubtract">
  ## mapSubtract
</div>

Добавленный в: v20.7.0

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

**Синтаксис**

```sql theme={null}
mapSubtract(arg1[, arg2, ...])
```

**Аргументы**

* `arg1[, arg2, ...]` — Map или Tuple из двух массивов, где элементы первого массива представляют собой ключи, а второй массив содержит значения для каждого ключа. [`Map(K, V)`](/ru/reference/data-types/map) или [`Tuple(Array(T), Array(T))`](/ru/reference/data-types/tuple)

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

Возвращает один Map или Tuple, в котором первый массив содержит отсортированные ключи, а второй — значения. [`Map(K, V)`](/ru/reference/data-types/map) или [`Tuple(Array(T), Array(T))`](/ru/reference/data-types/tuple)

**Примеры**

**С типом Map**

```sql title=Query theme={null}
SELECT mapSubtract(map(1, 1), map(1, 1))
```

```response title=Response theme={null}
{1:0}
```

**С map из кортежей**

```sql title=Query theme={null}
SELECT mapSubtract(([toUInt8(1), 2], [toInt32(1), 1]), ([toUInt8(1), 2], [toInt32(2), 1]))
```

```response title=Response theme={null}
([1, 2], [-1, 0])
```

<div id="mapUpdate">
  ## mapUpdate
</div>

Добавленный в: v22.3.0

Для двух Map возвращает первую Map, в которой значения обновлены значениями для соответствующих ключей из второй Map.

**Синтаксис**

```sql theme={null}
mapUpdate(map1, map2)
```

**Аргументы**

* `map1` — `Map`, который нужно обновить. [`Map(K, V)`](/ru/reference/data-types/map)
* `map2` — `Map`, значения из которого используются для обновления. [`Map(K, V)`](/ru/reference/data-types/map)

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

Возвращает `map1`, в котором значения обновлены на основе значений соответствующих ключей из `map2`. [`Map(K, V)`](/ru/reference/data-types/map)

**Примеры**

**Базовое использование**

```sql title=Query theme={null}
SELECT mapUpdate(map('key1', 0, 'key3', 0), map('key1', 10, 'key2', 10))
```

```response title=Response theme={null}
{'key3':0,'key1':10,'key2':10}
```

<div id="mapValues">
  ## mapValues
</div>

Добавленный в: v21.2.0

Возвращает значения указанного Map.
Эту функцию можно оптимизировать, включив настройку [`optimize_functions_to_subcolumns`](/ru/reference/settings/session-settings#optimize_functions_to_subcolumns).
Если настройка включена, функция считывает только подстолбец `values`, а не весь Map.
Запрос `SELECT mapValues(m) FROM table` преобразуется в `SELECT m.values FROM table`.

**Синтаксис**

```sql theme={null}
mapValues(map)
```

**Аргументы**

* `map` — объект Map, из которого извлекаются значения. [`Map(K, V)`](/ru/reference/data-types/map)

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

Возвращает массив, содержащий все значения из Map. [`Array(T)`](/ru/reference/data-types/array)

**Примеры**

**Пример использования**

```sql title=Query theme={null}
SELECT mapValues(map('k1', 'v1', 'k2', 'v2'))
```

```response title=Response theme={null}
['v1','v2']
```
