extractKeyValuePairs
Добавлено в: v23.4.0
Извлекает пары «ключ‑значение» из любой строки. Строка не обязательно должна быть полностью структурирована в формате пары ключ-значение;
Он может содержать шум (например, файлы журналов). Формат пар ключ-значение для интерпретации задаётся через аргументы функции.
Пара ключ-значение состоит из ключа, за которым следует key_value_delimiter, и значения. Поддерживаются ключи и значения в кавычках. Пары ключ-значение должны разделяться разделителями пар.
Синтаксис
extractKeyValuePairs(data, [key_value_delimiter], [pair_delimiter], [quoting_character], [unexpected_quoting_character_strategy])Аргументы
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}и начинает со следующего символа. Значение по умолчанию —PROMOTE
Возвращаемые значения
- Извлечённые пары «ключ-значение» в
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
┌Одинарная кавычка как символ кавычек
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
┌Примеры 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'} │
└──────────────┘Экранирующие последовательности без их поддержки
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
┌Синтаксис
extractKeyValuePairs(data, [key_value_delimiter], [pair_delimiter], [quoting_character], [unexpected_quoting_character_strategy])Псевдонимы: str_to_map, mapFromString
Аргументы
- Отсутствуют.
Возвращаемое значение
Примеры
extractKeyValuePairsWithEscaping
Добавленный в: 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
┌Синтаксис
extractKeyValuePairsWithEscaping(data, [key_value_delimiter], [pair_delimiter], [quoting_character], [unexpected_quoting_character_strategy])Аргументы
- Отсутствуют.
Возвращаемое значение
Примеры
map
Добавленный в: v21.1.0
Создаёт значение типа Map(key, value) из пар в формате ключ-значение.
Синтаксис
map(key1, value1[, key2, value2, ...])Аргументы
Возвращаемое значение
Возвращает значение типа 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}mapAdd
Добавленный в: 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)){1:2}С использованием кортежа
SELECT mapAdd(([toUInt8(1), 2], [1, 1]), ([toUInt8(1), 2], [1, 1]))([1,2],[2,2])mapAll
Добавленный в: v23.4.0
Проверяет, выполняется ли условие для всех пар ключ-значение в типе данных Map.
mapAll — функция высшего порядка.
В качестве первого аргумента ей можно передать лямбда-функцию.
Синтаксис
mapAll([func,] map)Аргументы
func— лямбда-функция.лямбда-функцияmap— проверяемый Map.Map(K, V)
Возвращаемое значение
Возвращает 1, если все пары ключ-значение удовлетворяют условию, иначе — 0. UInt8
Примеры
Пример использования
SELECT mapAll((k, v) -> v = 1, map('k1', 1, 'k2', 2))0mapApply
Добавленный в: v22.3.0
Применяет функцию к каждому элементу map.
Синтаксис
mapApply(func, map)Аргументы
func— Лямбда-функция.Лямбда-функцияmap— Map, к которому нужно применить функцию.Map(K, V)
Возвращаемое значение
Возвращает новый Map, полученный из исходного применением func к каждому элементу. Map(K, V)
Примеры
Пример использования
SELECT mapApply((k, v) -> (k, v * 2), map('k1', 1, 'k2', 2)){'k1':2,'k2':4}mapConcat
Добавленный в: v23.4.0
Объединяет несколько значений типа Map на основе равенства их ключей. Если элементы с одинаковым ключом есть более чем в одном входном Map, все элементы добавляются в результирующий Map, но через оператор [] доступен только первый из них.
Синтаксис
mapConcat(maps)Аргументы
maps— Произвольное количество значений типа Map.Map
Возвращаемое значение
Возвращает значение типа Map, полученное объединением Map, переданных в качестве аргументов. Map
Примеры
Пример использования
SELECT mapConcat(map('k1', 'v1'), map('k2', 'v2')){'k1':'v1','k2':'v2'}mapContainsKey
Добавленный в: v21.2.0
Определяет, содержится ли ключ в Map.
Синтаксис
mapContainsKey(map, key)Псевдонимы: mapContains
Аргументы
map— Объект Map, в котором выполняется поиск.Map(K, V)key— Ключ, который нужно найти. Тип должен совпадать с типом ключа в Map.Any
Возвращаемое значение
Возвращает 1, если Map содержит ключ, и 0 в противном случае. UInt8
Примеры
Пример использования
SELECT mapContainsKey(map('k1', 'v1', 'k2', 'v2'), 'k1')1mapContainsKeyLike
Добавленный в: 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 │
└─────────────────────────────┘mapContainsValue
Добавленный в: 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')1mapContainsValueLike
Добавленный в: 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;┌─mapContainsValueLike(a, 'a%')─┐
│ 1 │
│ 0 │
└───────────────────────────────┘mapExists
Добавленный в: v23.4.0
Проверяет, выполняется ли условие хотя бы для одной пары ключ-значение в Map.
mapExists — функция высшего порядка.
В качестве первого аргумента в нее можно передать лямбда-функцию.
Синтаксис
mapExists([func,] map)Аргументы
func— Необязательный. Лямбда-функция.лямбда-функцияmap— Проверяемое значение типа Map.Map(K, V)
Возвращаемое значение
Возвращает 1, если хотя бы одна пара ключ-значение удовлетворяет условию, в противном случае — 0. UInt8
Примеры
Пример использования
SELECT mapExists((k, v) -> v = 1, map('k1', 1, 'k2', 2))1mapExtractKeyLike
Добавленный в: 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'} │
│ {} │
└────────────────────────────┘mapExtractValueLike
Добавленный в: 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'} │
│ {} │
└──────────────────────────────┘mapFilter
Добавленный в: v22.3.0
Фильтрует map, применяя функцию к каждому её элементу.
Синтаксис
mapFilter(func, map)Аргументы
func— лямбда-функция.лямбда-функцияmap—Map, который нужно отфильтровать.Map(K, V)
Возвращаемое значение
Возвращает Map, содержащий только те элементы, для которых func возвращает значение, отличное от 0. Map(K, V)
Примеры
Пример использования
SELECT mapFilter((k, v) -> v > 1, map('k1', 1, 'k2', 2)){'k2':2}mapFromArrays
Добавленный в: v23.3.0
Создает Map из массива или Map ключей и массива или Map значений.
Функция служит удобной альтернативой синтаксису CAST([...], 'Map(key_type, value_type)').
Синтаксис
mapFromArrays(keys, values)Псевдонимы: MAP_FROM_ARRAYS
Аргументы
keys— Массив или Map ключей, из которых создаётся карта.ArrayилиMapvalues— Массив или Map значений, из которых создаётся карта.ArrayилиMap
Возвращаемое значение
Возвращает карту с ключами и значениями, сформированную из массива ключей и массива/карты значений. Map
Примеры
Базовое использование
SELECT mapFromArrays(['a', 'b', 'c'], [1, 2, 3]){'a':1,'b':2,'c':3}Для входных данных типа Map
SELECT mapFromArrays([1, 2, 3], map('a', 1, 'b', 2, 'c', 3)){1:('a',1),2:('b',2),3:('c',3)}mapKeys
Добавленный в: v21.2.0
Возвращает ключи заданного Map.
Эту функцию можно оптимизировать, включив настройку optimize_functions_to_subcolumns.
Когда настройка включена, функция считывает только подстолбец keys, а не весь Map.
Запрос SELECT mapKeys(m) FROM table преобразуется в SELECT m.keys FROM table.
Синтаксис
mapKeys(map)Аргументы
map— Map, из которого извлекаются ключи.Map(K, V)
Возвращаемое значение
Возвращает массив, содержащий все ключи Map. Array(T)
Примеры
Пример использования
SELECT mapKeys(map('k1', 'v1', 'k2', 'v2'))['k1','k2']mapPartialReverseSort
Добавленный в: 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)){'k1':3,'k3':2,'k2':1}mapPartialSort
Добавленный в: 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)){'k2':1,'k3':2,'k1':3}mapPopulateSeries
Добавленный в: v20.10.0
Заполняет отсутствующие пары ключ-значение в map с целочисленными ключами. Чтобы расширить ключи за пределы наибольшего значения, можно указать максимальный ключ. Точнее, функция возвращает map, в котором ключи образуют серию от наименьшего до наибольшего ключа (или до аргумента max, если он указан) с шагом 1, и соответствующие им значения. Если для ключа не указано значение, используется значение по умолчанию. Если ключи повторяются, с ключом связывается только первое значение (в порядке появления).
Синтаксис
mapPopulateSeries(map[, max]) | mapPopulateSeries(keys, values[, max])Аргументы
map— Значение типа Map с целочисленными ключами.Map((U)Int*, V)keys— Массив ключей.Array(T)values— Массив значений.Array(T)max— Необязательный параметр. Максимальное значение ключа.Int8илиInt16илиInt32илиInt64илиInt128илиInt256
Возвращаемое значение
Возвращает 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])mapReverseSort
Добавленный в: v23.4.0
Сортирует элементы Map в порядке убывания. Если указана функция func, порядок сортировки определяется результатом применения функции func к ключам и значениям Map.
Синтаксис
mapReverseSort([func,] map)Аргументы
func— Необязательный. Лямбда-функция.Лямбда-функцияmap— Map, который нужно отсортировать.Map(K, V)
Возвращаемое значение
Возвращает Map, отсортированный по убыванию. Map(K, V)
Примеры
Пример использования
SELECT mapReverseSort((k, v) -> v, map('k1', 3, 'k2', 1, 'k3', 2)){'k1':3,'k3':2,'k2':1}mapSort
Добавленный в: v23.4.0
Сортирует элементы Map по возрастанию. Если указана функция func, порядок сортировки определяется результатом применения функции func к ключам и значениям Map.
Синтаксис
mapSort([func,] map)Аргументы
func— Необязательный. Лямбда-функция.Лямбда-функцияmap— Map, которую нужно отсортировать.Map(K, V)
Возвращаемое значение
Возвращает Map, отсортированную по возрастанию. Map(K, V)
Примеры
Пример использования
SELECT mapSort((k, v) -> v, map('k1', 3, 'k2', 1, 'k3', 2)){'k2':1,'k3':2,'k1':3}mapSubtract
Добавленный в: 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)){1:0}С map из кортежей
SELECT mapSubtract(([toUInt8(1), 2], [toInt32(1), 1]), ([toUInt8(1), 2], [toInt32(2), 1]))([1,2],[-1,0])mapUpdate
Добавленный в: v22.3.0
Для двух Map возвращает первую Map, в которой значения обновлены значениями для соответствующих ключей из второй Map.
Синтаксис
mapUpdate(map1, map2)Аргументы
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}mapValues
Добавленный в: v21.2.0
Возвращает значения указанного Map.
Эту функцию можно оптимизировать, включив настройку optimize_functions_to_subcolumns.
Если настройка включена, функция считывает только подстолбец values, а не весь Map.
Запрос SELECT mapValues(m) FROM table преобразуется в SELECT m.values FROM table.
Синтаксис
mapValues(map)Аргументы
map— объект Map, из которого извлекаются значения.Map(K, V)
Возвращаемое значение
Возвращает массив, содержащий все значения из Map. Array(T)
Примеры
Пример использования
SELECT mapValues(map('k1', 'v1', 'k2', 'v2'))['v1','v2']