Добавленный в: v23.4.0
Извлекает пары ключ-значение из любой строки. Строка не обязана быть полностью структурирована в формате ключ-значение;
Он может содержать шум (например, файлы журналов). Формат пар ключ-значение для интерпретации задаётся через аргументы функции.
Пара ключ-значение состоит из ключа, за которым следует key_value_delimiter, и значения. Ключи и значения в кавычках также поддерживаются. Пары ключ-значение должны разделяться разделителями пар.
Синтаксис
extractKeyValuePairs(data, [key_value_delimiter], [pair_delimiter], [quoting_character])
Аргументы
data — строка, из которой извлекаются пары «ключ-значение». String или FixedString.
key_value_delimiter - Символ, используемый в качестве разделителя между ключом и значением. По умолчанию :. String или FixedString.
pair_delimiters - Набор символов, используемых в качестве разделителей между парами. По умолчанию \space, , и ;. 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} и начинает со следующего символа. Значение по умолчанию — INVALID
Возвращаемые значения
- Извлечённые пары «ключ-значение» в
Map(String, String).
Примеры
Запрос:
Простой случай
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'} │
└─────────────────────────────────────────────────────────────────────────┘
Одинарная кавычка в качестве символа кавычки
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
SELECT extractKeyValuePairs('name"abc:5', ':', ' ,;', '\"', 'INVALID') as kv;
┌─kv────────────────┐
│ {'abc':'5'} │
└───────────────────┘
SELECT extractKeyValuePairs('name"abc":5', ':', ' ,;', '\"', 'INVALID') as 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;
SELECT extractKeyValuePairs('name"abc":5', ':', ' ,;', '\"', 'PROMOTE') as kv;
┌─kv───────────┐
│ {'abc':'5'} │
└──────────────┘
Управляющие последовательности без их поддержки
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'} │
└───────────────────────┘
Синтаксис
extractKeyValuePairs(input)
Псевдонимы: str_to_map, mapFromString
Аргументы
Возвращаемое значение
Примеры
Добавленный в: 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\, а последующее экранирование оставит это без изменений.
Начальные экранирующие последовательности в ключах будут пропускаться, а в значениях будут считаться недопустимыми.
Экранирующие последовательности при включенной поддержке экранирования
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'} │
└──────────────────┘
Синтаксис
extractKeyValuePairsWithEscaping(input)
Аргументы
Возвращаемое значение
Примеры
Добавленный в: v21.1.0
Создаёт значение типа Map(key, value) из пар в формате ключ-значение.
Синтаксис
map(key1, value1[, key2, value2, ...])
Аргументы
key_n — Ключи элементов типа Map. Any
value_n — Значения элементов типа Map. Any
Возвращаемое значение
Возвращает значение типа Map, содержащее пары ключ:значение. Map(Any, Any)
Примеры
Пример использования
SELECT map('key1', number, 'key2', number * 2) FROM numbers(3)
{'key1':0,'key2':0}
{'key1':1,'key2':2}
{'key1':2,'key2':4}
Добавленный в: v20.7.0
Собирает все ключи и суммирует соответствующие им значения.
Синтаксис
mapAdd(arg1[, arg2, ...])
Аргументы
arg1[, arg2, ...] — объекты типа Map или Tuple из двух массивов, в которых элементы первого массива представляют ключи, а второй массив содержит значения для каждого ключа. Map(K, V) или Tuple(Array(T), Array(T))
Возвращаемое значение
Возвращает Map или Tuple, где первый массив содержит отсортированные ключи, а второй массив — значения. Map(K, V) или Tuple(Array(T), Array(T))
Примеры
С типом Map
SELECT mapAdd(map(1, 1), map(1, 1))
С использованием кортежа
SELECT mapAdd(([toUInt8(1), 2], [1, 1]), ([toUInt8(1), 2], [1, 1]))
Добавленный в: v23.4.0
Проверяет, выполняется ли условие для всех пар ключ-значение в типе данных Map.
mapAll — функция высшего порядка.
В качестве первого аргумента ей можно передать лямбда-функцию.
Синтаксис
Аргументы
Возвращаемое значение
Возвращает 1, если все пары ключ-значение удовлетворяют условию, иначе — 0. UInt8
Примеры
Пример использования
SELECT mapAll((k, v) -> v = 1, map('k1', 1, 'k2', 2))
Добавленный в: v22.3.0
Применяет функцию к каждому элементу map.
Синтаксис
Аргументы
Возвращаемое значение
Возвращает новый Map, полученный из исходного применением func к каждому элементу. Map(K, V)
Примеры
Пример использования
SELECT mapApply((k, v) -> (k, v * 2), map('k1', 1, 'k2', 2))
Добавленный в: v23.4.0
Объединяет несколько значений типа Map на основе равенства их ключей.
Если элементы с одинаковым ключом есть более чем в одном входном Map, все элементы добавляются в результирующий Map, но через оператор [] доступен только первый из них.
Синтаксис
Аргументы
maps — Произвольное количество значений типа Map. Map
Возвращаемое значение
Возвращает значение типа Map, полученное объединением Map, переданных в качестве аргументов. Map
Примеры
Пример использования
SELECT mapConcat(map('k1', 'v1'), map('k2', 'v2'))
Добавленный в: v21.2.0
Определяет, содержится ли ключ в Map.
Синтаксис
Псевдонимы: mapContains
Аргументы
map — Объект Map, в котором выполняется поиск. Map(K, V)
key — Ключ, который нужно найти. Тип должен совпадать с типом ключа в Map. Any
Возвращаемое значение
Возвращает 1, если Map содержит ключ, и 0 в противном случае. UInt8
Примеры
Пример использования
SELECT mapContainsKey(map('k1', 'v1', 'k2', 'v2'), 'k1')
Добавленный в: v23.4.0
Проверяет, содержит ли Map ключ, соответствующий указанному шаблону LIKE.
Синтаксис
mapContainsKeyLike(map, pattern)
Аргументы
map — Map, в котором выполняется поиск. Map(K, V)
pattern — Шаблон регулярного выражения, с которым сопоставляются ключи. const String
Возвращаемое значение
Возвращает 1, если map содержит ключ, соответствующий pattern, иначе — 0. UInt8
Примеры
Пример использования
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;
┌─mapContainsKeyLike(a, 'a%')─┐
│ 1 │
│ 0 │
└─────────────────────────────┘
Добавленный в: v25.6.0
Определяет, содержится ли значение в Map.
Синтаксис
mapContainsValue(map, value)
Аргументы
map — Map, в которой выполняется поиск. Map(K, V)
value — Искомое значение. Тип должен совпадать с типом значений в map. Any
Возвращаемое значение
Возвращает 1, если map содержит value, и 0 — в противном случае. UInt8
Примеры
Пример использования
SELECT mapContainsValue(map('k1', 'v1', 'k2', 'v2'), 'v1')
Добавленный в: v25.5.0
Проверяет, содержит ли Map значение, соответствующее указанному шаблону LIKE.
Синтаксис
mapContainsValueLike(map, pattern)
Аргументы
map — Map, в которой выполняется поиск. Map(K, V)
pattern — Шаблон регулярного выражения для сопоставления со значениями. const String
Возвращаемое значение
Возвращает 1, если map содержит значение, соответствующее pattern, в противном случае — 0. UInt8
Примеры
Пример использования
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;
┌─mapContainsV⋯ke(a, 'a%')─┐
│ 1 │
│ 0 │
└──────────────────────────┘
Добавленный в: v23.4.0
Проверяет, выполняется ли условие хотя бы для одной пары ключ-значение в Map.
mapExists — функция высшего порядка.
В качестве первого аргумента в нее можно передать лямбда-функцию.
Синтаксис
Аргументы
Возвращаемое значение
Возвращает 1, если хотя бы одна пара ключ-значение удовлетворяет условию, в противном случае — 0. UInt8
Примеры
Пример использования
SELECT mapExists((k, v) -> v = 1, map('k1', 1, 'k2', 2))
Добавленный в: v23.4.0
Принимает map со строковыми ключами и шаблон LIKE, а возвращает map с элементами, ключи которых соответствуют шаблону.
Синтаксис
mapExtractKeyLike(map, pattern)
Аргументы
map — Map, из которого извлекаются данные. Map(K, V)
pattern — Шаблон регулярного выражения, с которым сопоставляются ключи. const String
Возвращаемое значение
Возвращает Map, содержащий элементы, ключи которых соответствуют указанному шаблону регулярного выражения. Если ни один элемент не соответствует шаблону регулярного выражения, возвращается пустой Map. Map(K, V)
Примеры
Пример использования
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;
┌─mapExtractKeyLike(a, 'a%')─┐
│ {'abc':'abc'} │
│ {} │
└────────────────────────────┘
Добавленный в: v25.5.0
Для map со строковыми значениями и шаблоном LIKE эта функция возвращает map, содержащий элементы, значения которых соответствуют шаблону.
Синтаксис
mapExtractValueLike(map, pattern)
Аргументы
map — Map, из которого извлекаются данные. Map(K, V)
pattern — Шаблон регулярного выражения для сопоставления со значениями. const String
Возвращаемое значение
Возвращает map, содержащий элементы, значения которых соответствуют указанному шаблону регулярного выражения. Если ни один элемент не соответствует шаблону регулярного выражения, возвращается пустой map. Map(K, V)
Примеры
Пример использования
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;
┌─mapExtractValueLike(a, 'a%')─┐
│ {'abc':'abc'} │
│ {} │
└──────────────────────────────┘
Добавленный в: v22.3.0
Фильтрует map, применяя функцию к каждому её элементу.
Синтаксис
Аргументы
Возвращаемое значение
Возвращает Map, содержащий только те элементы, для которых func возвращает значение, отличное от 0. Map(K, V)
Примеры
Пример использования
SELECT mapFilter((k, v) -> v > 1, map('k1', 1, 'k2', 2))
Добавленный в: v23.3.0
Создает map из массива или map ключей и массива или map значений.
Функция служит удобной альтернативой синтаксису CAST([...], 'Map(key_type, value_type)').
Синтаксис
mapFromArrays(keys, values)
Псевдонимы: MAP_FROM_ARRAYS
Аргументы
keys — Массив или Map ключей, из которых создаётся карта. Array или Map
values — Массив или Map значений, из которых создаётся карта. Array или Map
Возвращаемое значение
Возвращает карту с ключами и значениями, сформированную из массива ключей и массива/карты значений. Map
Примеры
Базовое использование
SELECT mapFromArrays(['a', 'b', 'c'], [1, 2, 3])
Для входных данных типа Map
SELECT mapFromArrays([1, 2, 3], map('a', 1, 'b', 2, 'c', 3))
{1:('a', 1), 2:('b', 2), 3:('c', 3)}
Добавленный в: v21.2.0
Возвращает ключи заданного Map.
Эту функцию можно оптимизировать, включив настройку optimize_functions_to_subcolumns.
Когда настройка включена, функция считывает только подстолбец keys, а не весь Map.
Запрос SELECT mapKeys(m) FROM table преобразуется в SELECT m.keys FROM table.
Синтаксис
Аргументы
map — Map, из которого извлекаются ключи. Map(K, V)
Возвращаемое значение
Возвращает массив, содержащий все ключи карты. Array(T)
Примеры
Пример использования
SELECT mapKeys(map('k1', 'v1', 'k2', 'v2'))
Добавленный в: v23.4.0
Сортирует элементы типа Map в порядке убывания; дополнительный аргумент limit позволяет выполнять частичную сортировку.
Если указана функция func, порядок сортировки определяется результатом применения функции func к ключам и значениям типа Map.
Синтаксис
mapPartialReverseSort([func,] limit, map)
Аргументы
func — Необязательный параметр. Лямбда-функция. Лямбда-функция
limit — Сортируются элементы в диапазоне [1..limit]. (U)Int*
map — Сортируемый Map. Map(K, V)
Возвращаемое значение
Возвращает частично отсортированный Map в порядке убывания. Map(K, V)
Примеры
Пример использования
SELECT mapPartialReverseSort((k, v) -> v, 2, map('k1', 3, 'k2', 1, 'k3', 2))
Добавленный в: v23.4.0
Сортирует элементы map в порядке возрастания; дополнительный аргумент limit позволяет выполнять частичную сортировку.
Если указана функция func, порядок сортировки определяется результатом применения функции func к ключам и значениям map.
Синтаксис
mapPartialSort([func,] limit, map)
Аргументы
func — Необязательный. Лямбда-функция. лямбда-функция
limit — Сортируются элементы в диапазоне [1..limit]. (U)Int*
map — Сортируемое значение типа Map. Map(K, V)
Возвращаемое значение
Возвращает частично отсортированное значение типа Map. Map(K, V)
Примеры
Пример использования
SELECT mapPartialSort((k, v) -> v, 2, map('k1', 3, 'k2', 1, 'k3', 2))
Добавленный в: v20.10.0
Заполняет отсутствующие пары ключ-значение в map с целочисленными ключами.
Чтобы расширить ключи за пределы наибольшего значения, можно указать максимальный ключ.
Точнее, функция возвращает map, в котором ключи образуют серию от наименьшего до наибольшего ключа (или до аргумента max, если он указан) с шагом 1, и соответствующие им значения.
Если для ключа не указано значение, используется значение по умолчанию.
Если ключи повторяются, с ключом связывается только первое значение (в порядке появления).
Синтаксис
mapPopulateSeries(map[, max]) | mapPopulateSeries(keys, values[, max])
Аргументы
Возвращаемое значение
Возвращает Map или кортеж из двух массивов, где первый содержит ключи в отсортированном порядке, а второй — значения для соответствующих ключей. Map(K, V) или Tuple(Array(UInt*), Array(Any))
Примеры
С типом Map
SELECT 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)
([1, 2, 3, 4, 5], [11, 22, 0, 44, 0])
Добавленный в: v23.4.0
Сортирует элементы Map в порядке убывания.
Если указана функция func, порядок сортировки определяется результатом применения функции func к ключам и значениям Map.
Синтаксис
mapReverseSort([func,] map)
Аргументы
Возвращаемое значение
Возвращает Map, отсортированный по убыванию. Map(K, V)
Примеры
Пример использования
SELECT mapReverseSort((k, v) -> v, map('k1', 3, 'k2', 1, 'k3', 2))
Добавленный в: v23.4.0
Сортирует элементы Map по возрастанию.
Если указана функция func, порядок сортировки определяется результатом применения функции func к ключам и значениям Map.
Синтаксис
Аргументы
Возвращаемое значение
Возвращает Map, отсортированную по возрастанию. Map(K, V)
Примеры
Пример использования
SELECT mapSort((k, v) -> v, map('k1', 3, 'k2', 1, 'k3', 2))
Добавленный в: v20.7.0
Собирает все ключи и вычитает соответствующие им значения.
Синтаксис
mapSubtract(arg1[, arg2, ...])
Аргументы
arg1[, arg2, ...] — Map или Tuple из двух массивов, где элементы первого массива представляют собой ключи, а второй массив содержит значения для каждого ключа. Map(K, V) или Tuple(Array(T), Array(T))
Возвращаемое значение
Возвращает один Map или Tuple, в котором первый массив содержит отсортированные ключи, а второй — значения. Map(K, V) или Tuple(Array(T), Array(T))
Примеры
С типом Map
SELECT mapSubtract(map(1, 1), map(1, 1))
С map из кортежей
SELECT mapSubtract(([toUInt8(1), 2], [toInt32(1), 1]), ([toUInt8(1), 2], [toInt32(2), 1]))
Добавленный в: v22.3.0
Для двух Map возвращает первую Map, в которой значения обновлены значениями для соответствующих ключей из второй Map.
Синтаксис
Аргументы
map1 — Map, который нужно обновить. Map(K, V)
map2 — Map, значения из которого используются для обновления. Map(K, V)
Возвращаемое значение
Возвращает map1, в котором значения обновлены на основе значений соответствующих ключей из map2. Map(K, V)
Примеры
Базовое использование
SELECT mapUpdate(map('key1', 0, 'key3', 0), map('key1', 10, 'key2', 10))
{'key3':0,'key1':10,'key2':10}
Добавленный в: v21.2.0
Возвращает значения указанного Map.
Эту функцию можно оптимизировать, включив настройку optimize_functions_to_subcolumns.
Если настройка включена, функция считывает только подстолбец values, а не весь Map.
Запрос SELECT mapValues(m) FROM table преобразуется в SELECT m.values FROM table.
Синтаксис
Аргументы
map — объект Map, из которого извлекаются значения. Map(K, V)
Возвращаемое значение
Возвращает массив, содержащий все значения из Map. Array(T)
Примеры
Пример использования
SELECT mapValues(map('k1', 'v1', 'k2', 'v2'))
Последнее изменение 10 июня 2026 г.