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