Функции Map
map
Создаёт значение типа Map(key, value) из пар «ключ–значение».
Синтаксис
Аргументы
key_n— Ключи элементов Map. Любой тип, поддерживаемый как тип ключа для Map.value_n— Значения элементов Map. Любой тип, поддерживаемый как тип значения для Map.
Возвращаемое значение
- Map, содержащий пары
key:value. Map(key, value).
Примеры
Запрос:
Результат:
mapFromArrays
Создает значение типа Map из массива (или Map) ключей и массива (или Map) значений.
Функция является удобной альтернативой синтаксису 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]).
Синтаксис
Псевдоним: MAP_FROM_ARRAYS(keys, values)
Аргументы
keys— Массив или отображение ключей типа Array или Map, из которых создаётся значение типа Map. Еслиkeys— массив, допускаются типыArray(Nullable(T))илиArray(LowCardinality(Nullable(T)))при условии, что он не содержит значения NULL.values— Массив или отображение значений типа Array или Map, из которых создаётся значение типа Map.
Возвращаемое значение
- Отображение (Map) с ключами и значениями, сформированными из массива ключей и массива/отображения значений.
Пример
Запрос:
Результат:
mapFromArrays также принимает аргументы типа Map. Во время выполнения они преобразуются в массив кортежей.
Результат:
Результат:
extractKeyValuePairs
Преобразует строку с парами ключ-значение в Map(String, String). Разбор строки устойчив к «шуму» (например, в журналах/логах). Пары ключ-значение во входной строке состоят из ключа, за которым следует разделитель ключ-значение и значение. Пары ключ-значение разделяются разделителем пар. Ключи и значения могут быть заключены в кавычки.
Синтаксис
Псевдонимы:
str_to_mapmapFromString
Аргументы
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}и продолжит обработку со следующего символа.
Возвращаемые значения
- Набор пар ключ–значение. Тип: Map(String, String)
Примеры
Запрос
Результат:
С одинарной кавычкой ' в качестве символа кавычания:
Результат:
Примеры параметра unexpected_quoting_character_strategy:
unexpected_quoting_character_strategy=invalid
unexpected_quoting_character_strategy=accept
unexpected_quoting_character_strategy=promote
Последовательности экранирования при отключённой поддержке экранирования:
Результат:
Чтобы восстановить строковые пары ключ–значение Map, сериализованные с помощью toString:
Результат:
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\, и последующее экранирование сохранит это без изменений.
Начальные последовательности экранирования будут пропускаться в ключах и будут считаться некорректными для значений.
Примеры
Последовательности экранирования при включённой поддержке экранирования:
Результат:
mapAdd
Собирает все ключи и суммирует соответствующие им значения.
Синтаксис
Аргументы
Аргументы — это map или tuple из двух arrays, где элементы в первом массиве представляют ключи, а второй массив содержит значения для каждого ключа. Все массивы ключей должны иметь один и тот же тип, а все массивы значений должны содержать элементы, которые приводятся к одному типу (Int64, UInt64 или Float64). Общий приведённый тип используется как тип результирующего массива.
Возвращаемое значение
- В зависимости от аргументов функция возвращает один map или tuple, где первый массив содержит отсортированные ключи, а второй массив содержит значения.
Пример
Запрос с типом Map:
Результат:
Запрос с использованием кортежа:
Результат:
mapSubtract
Собирает все ключи и вычитает соответствующие им значения.
Синтаксис
Аргументы
Аргументы — это map или tuple из двух array, где элементы первого массива являются ключами, а второй массив содержит значения для каждого ключа. Все массивы ключей должны иметь одинаковый тип, а все массивы значений должны содержать элементы, которые могут быть приведены к одному типу (Int64, UInt64 или Float64). Общий приведённый тип используется как тип результирующего массива.
Возвращаемое значение
- В зависимости от аргументов функция возвращает один map или tuple, где первый массив содержит отсортированные ключи, а второй массив содержит значения.
Пример
Запрос с типом Map:
Результат:
Запрос с картой кортежей:
Результат:
mapPopulateSeries
Заполняет отсутствующие пары ключ-значение в map с целочисленными ключами.
Чтобы можно было расширять диапазон ключей за пределы наибольшего значения, можно задать максимальный ключ.
Более точно, функция возвращает map, в которой ключи образуют последовательность от наименьшего до наибольшего ключа (или до аргумента max, если он указан) с шагом 1 и соответствующими значениями.
Если значение для ключа не задано, в качестве результата используется значение по умолчанию.
Если ключи повторяются, с ключом связывается только первое значение (в порядке появления).
Синтаксис
Для аргументов-массивов количество элементов в keys и values должно быть одинаковым для каждой строки.
Аргументы
В качестве аргументов используется либо Map, либо две Array, где первый массив содержит ключи, а второй — значения для каждого ключа.
Массивы для отображения:
map— Map с целочисленными ключами. Map.
или
keys— Массив ключей. Array(Int).values— Массив значений. Array(Int).max— Максимальное значение ключа. Необязательный аргумент. Int8, Int16, Int32, Int64, Int128, Int256.
Возвращаемое значение
- В зависимости от аргументов возвращается Map или Tuple из двух Array: ключи в отсортированном порядке и значения, соответствующие этим ключам.
Пример
Запрос с типом Map:
Результат:
Запрос с сопоставлением массивов:
Результат:
mapKeys
Возвращает ключи заданного Map.
Эта функция может быть оптимизирована с помощью настройки optimize_functions_to_subcolumns.
При включённой настройке функция читает только подколонку keys вместо всей Map.
Запрос SELECT mapKeys(m) FROM table преобразуется в SELECT m.keys FROM table.
Синтаксис
Аргументы
map— значение типа Map.
Возвращаемое значение
- Массив, содержащий все ключи из
map. Array.
Пример
Запрос:
Результат:
mapContains
Возвращает, содержится ли заданный ключ в заданном отображении.
Синтаксис
Псевдоним: mapContainsKey(map, key)
Аргументы
map— отображение. Map.key— ключ. Тип должен совпадать с типом ключа вmap.
Возвращаемое значение
1, еслиmapсодержитkey,0в противном случае. UInt8.
Пример
Запрос:
Результат:
mapContainsKeyLike
Синтаксис
Аргументы
map— карта. Map.pattern— строковый шаблон для сопоставления.
Возвращаемое значение
1, еслиmapсодержит ключ, соответствующий заданному шаблону,0— в противном случае.
Пример
Запрос:
Результат:
mapExtractKeyLike
Для map со строковыми ключами и шаблоном LIKE функция возвращает map, содержащую элементы, ключи которых соответствуют этому шаблону.
Синтаксис
Аргументы
map— значение типа Map.pattern- строковый шаблон для сопоставления.
Возвращаемое значение
- Map, содержащий элементы, ключ которых соответствует указанному шаблону. Если ни один элемент не соответствует шаблону, возвращается пустой Map.
Пример
Запрос:
Результат:
mapValues
Возвращает значения заданной карты.
Эта функция может быть оптимизирована с помощью настройки optimize_functions_to_subcolumns.
При включённой настройке функция считывает только подстолбец values вместо всей карты.
Запрос SELECT mapValues(m) FROM table преобразуется в SELECT m.values FROM table.
Синтаксис
Аргументы
map— отображение. Map.
Возвращаемое значение
- Массив, содержащий все значения отображения
map. Array.
Пример
Запрос:
Результат:
mapContainsValue
Возвращает, содержится ли заданное значение в указанном отображении (map).
Синтаксис
Псевдоним: mapContainsValue(map, value)
Аргументы
map— Значение типа Map. Map.value— Значение. Тип должен совпадать с типом значений вmap.
Возвращаемое значение
1, еслиmapсодержитvalue,0в противном случае. UInt8.
Пример
Запрос:
Результат:
mapContainsValueLike
Синтаксис
Аргументы
map— карта. См. Map.pattern- строковый шаблон для сопоставления.
Возвращаемое значение
1, еслиmapсодержитvalue, удовлетворяющее указанному шаблону, иначе0.
Пример
Запрос:
Результат:
mapExtractValueLike
Для карты со строковыми значениями и шаблоном LIKE эта функция возвращает карту с элементами, значения которых соответствуют шаблону.
Синтаксис
Аргументы
map— значение типа Map. См. Map.pattern- строковый шаблон для сопоставления.
Возвращаемое значение
- Map, содержащий элементы, значения которых соответствуют указанному шаблону. Если ни один элемент не соответствует шаблону, возвращается пустой Map.
Пример
Запрос:
Результат:
mapApply
Применяет функцию к каждому элементу карты (Map).
Синтаксис
Аргументы
func— лямбда-функция.map— Map.
Возвращаемое значение
- Возвращает отображение, полученное из исходного отображения путём применения
func(map1[i], ..., mapN[i])к каждому элементу.
Пример
Запрос:
Результат:
mapFilter
Фильтрует отображение (map), применяя функцию к каждому его элементу.
Синтаксис
Аргументы
func— лямбда-функция.map— Map.
Возвращаемое значение
- Возвращает объект типа Map, который содержит только те элементы
map, для которыхfunc(map1[i], ..., mapN[i])возвращает значение, отличное от 0.
Пример
Запрос:
Результат:
mapUpdate
Синтаксис
Аргументы
Возвращаемое значение
- Возвращает
map1с обновлёнными значениями для соответствующих ключей изmap2.
Пример
Запрос:
Результат:
mapConcat
Объединяет несколько отображений (map) на основе равенства их ключей.
Если элементы с одинаковым ключом присутствуют более чем в одном входном отображении, все элементы добавляются в результирующее отображение, но только первый из них доступен через оператор [].
Синтаксис
Аргументы
maps– Произвольное количество значений типа Map.
Возвращаемое значение
- Возвращает значение типа Map, полученное конкатенацией значений Map, переданных в качестве аргументов.
Примеры
Запрос:
Результат:
Запрос:
Результат:
mapExists([func,], map)
Возвращает 1, если в map есть хотя бы одна пара ключ–значение, для которой func(key, value) возвращает значение, отличное от 0. В противном случае возвращает 0.
mapExists — это функция высшего порядка.
Ей можно передать лямбда-функцию в качестве первого аргумента.
Пример
Запрос:
Результат:
mapAll([func,] map)
Возвращает 1, если func(key, value) возвращает значение, отличное от 0, для всех пар ключ–значение в map. В противном случае возвращает 0.
Учтите, что mapAll — это функция высшего порядка.
Ей можно передать лямбда-функцию в качестве первого аргумента.
Пример
Запрос:
Результат:
mapSort([func,], map)
Сортирует элементы map по возрастанию.
Если указана функция func, порядок сортировки определяется результатом применения этой функции к ключам и значениям map.
Примеры
Для получения дополнительных сведений см. справочник по функции arraySort.
mapPartialSort
Сортирует элементы map по возрастанию с дополнительным аргументом limit, позволяющим выполнить частичную сортировку.
Если указана функция func, порядок сортировки определяется результатом применения func к ключам и значениям map.
Синтаксис
Аргументы
func– необязательная функция, применяемая к ключам и значениямmap. Lambda function.limit– элементы в диапазоне [1..limit] сортируются. (U)Int.map– отображение (map) для сортировки. Map.
Возвращаемое значение
- Частично отсортированное отображение (map). Map.
Пример
mapReverseSort([func,], map)
Сортирует элементы map в порядке убывания.
Если указана функция func, порядок сортировки определяется результатом функции func, применяемой к ключам и значениям map.
Примеры
Подробнее см. описание функции arrayReverseSort.
mapPartialReverseSort
Сортирует элементы map в порядке убывания, при этом дополнительный аргумент limit позволяет выполнить частичную сортировку.
Если указана функция func, порядок сортировки определяется результатом применения функции func к ключам и значениям map.
Синтаксис
Аргументы
func– Необязательная функция, применяемая к ключам и значениям карты. Lambda function.limit– Сортируются элементы с индексами в диапазоне [1..limit]. (U)Int.map– Карта для сортировки. Map.
Возвращаемое значение
- Частично отсортированная карта. Map.
Пример