tuple-map-functions
description: 'Документация для функций Map для Tuple' sidebar_label: 'Карты' sidebar_position: 120 slug: /sql-reference/functions/tuple-map-functions title: 'Функции Map'
Аргументы
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). Парсинг tolerant к шуму (например, к журналам). Пары ключ-значение в входной строке состоят из ключа, за которым следует разделитель ключ-значение и значение. Пары ключ-значение разделены разделителем пар. Ключи и значения могут быть заключены в кавычки.
Синтаксис
Псевдоним:
str_to_map
mapFromString
Аргументы
data
- Строка для извлечения пар ключ-значение. String или FixedString.key_value_delimiter
- Один символ, разделяющий ключи и значения. По умолчанию:
. String или FixedString.pair_delimiters
- Набор символов, разделяющих пары. По умолчанию,
и;
. String или FixedString.quoting_character
- Один символ, используемый в качестве символа кавычки. По умолчанию"
. String или FixedString.
Возвращаемое значение
- Массив пар ключ-значение. Тип: Map(String, String)
Примеры
Запрос
Результат:
С одинарной кавычкой '
в качестве символа кавычки:
Результат:
Экранированные последовательности без поддержки экранирования:
Результат:
Чтобы восстановить строку карты пар ключ-значение, сериализованную с помощью 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 или tuples из двух arrays, где элементы первого массива представляют ключи, а второй массив содержит значения для каждого ключа. Все массивы ключей должны иметь один и тот же тип, и все массивы значений должны содержать элементы, которые приводятся к одному типу (Int64, UInt64 или Float64). Общий приводимый тип используется в качестве типа для результирующего массива.
Возвращаемое значение
- В зависимости от аргументов возвращает одну map или tuple, где первый массив содержит отсортированные ключи, а второй массив содержит значения.
Пример
Запрос с типом Map
:
Результат:
Запрос с кортежем:
Результат:
mapSubtract
Собирает все ключи и вычитает соответствующие значения.
Синтаксис
Аргументы
Аргументы могут быть maps или tuples из двух arrays, где элементы первого массива представляют ключи, а второй массив содержит значения для каждого ключа. Все массивы ключей должны иметь один и тот же тип, и все массивы значений должны содержать элементы, которые приводятся к одному типу (Int64, UInt64 или Float64). Общий приводимый тип используется в качестве типа для результирующего массива.
Возвращаемое значение
- В зависимости от аргументов возвращает одну map или tuple, где первый массив содержит отсортированные ключи, а второй массив содержит значения.
Пример
Запрос с типом Map
:
Результат:
Запрос с кортежем:
Результат:
mapPopulateSeries
Заполняет недостающие пары ключ-значение в карте с целочисленными ключами.
Для поддержки расширения ключей за пределами наибольшего значения можно указать максимальный ключ.
Более конкретно, функция возвращает карту, в которой ключи образуют серию от наименьшего до наибольшего ключа (или аргумента max
, если он указан) с шагом 1, и соответствующие значения.
Если значение не указано для ключа, используется значение по умолчанию.
В случае повторяющихся ключей только первое значение (в порядке появления) связывается с ключом.
Синтаксис
Для массивных аргументов число элементов в keys
и values
должно быть одинаковым для каждой строки.
Аргументы
Аргументы могут быть Maps или два Arrays, где первый и второй массив содержат ключи и значения для каждого ключа.
Отображаемые массивы:
map
— Карта с целыми ключами. Map.
или
keys
— Массив ключей. Array(Int).values
— Массив значений. Array(Int).max
— Максимальное значение ключа. Необязательно. Int8, Int16, Int32, Int64, Int128, Int256.
Возвращаемое значение
- В зависимости от аргументов возвращает Map или Tuple из двух Arrays: ключи в отсортированном порядке и значения соответствующих ключей.
Пример
Запрос с типом Map
:
Результат:
Запрос с отображаемыми массивами:
Результат:
mapContains
Возвращает, содержится ли данный ключ в данной карте.
Синтаксис
Аргументы
map
— Карта. Map.key
— Ключ. Тип должен соответствовать типу ключа картыmap
.
Возвращаемое значение
1
, еслиmap
содержитkey
,0
, если нет. UInt8.
Пример
Запрос:
Результат:
mapKeys
Возвращает ключи данной карты.
Эта функция может быть оптимизирована, если включить настройку optimize_functions_to_subcolumns.
При включенной настройке функция читает только подколонку keys вместо всей карты.
Запрос SELECT mapKeys(m) FROM table
трансформируется в SELECT m.keys FROM table
.
Синтаксис
Аргументы
map
— Карта. Map.
Возвращаемое значение
- Массив, содержащий все ключи из
map
. Array.
Пример
Запрос:
Результат:
mapValues
Возвращает значения данной карты.
Эта функция может быть оптимизирована, если включить настройку optimize_functions_to_subcolumns.
При включенной настройке функция читает только подколонку values вместо всей карты.
Запрос SELECT mapValues(m) FROM table
трансформируется в SELECT m.values FROM table
.
Синтаксис
Аргументы
map
— Карта. Map.
Возвращаемое значение
- Массив, содержащий все значения из
map
. Array.
Пример
Запрос:
Результат:
mapContainsKeyLike
Синтаксис
Аргументы
map
— Карта. Map.pattern
- Строковый шаблон для сопоставления.
Возвращаемое значение
1
, еслиmap
содержит ключ, соответствующий указанному шаблону,0
, если нет.
Пример
Запрос:
Результат:
mapExtractKeyLike
Данная функция возвращает карту с элементами, где ключ соответствует шаблону, если карта имеет строковые ключи.
Синтаксис
Аргументы
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.
Пример