Перейти к основному содержимому
Перейти к основному содержимому

Map(K, V)

Тип данных Map(K, V) хранит пары ключ-значение.

В отличие от других баз данных, в ClickHouse карты не уникальны, т.е. карта может содержать два элемента с одинаковым ключом. (Причина этого в том, что карты внутренне реализованы как Array(Tuple(K, V)).)

Вы можете использовать синтаксис m[k], чтобы получить значение для ключа k в карте m. Кроме того, m[k] сканирует карту, т.е. время выполнения операции линейно относительно размера карты.

Параметры

  • K — Тип ключей карты. Произвольный тип, кроме Nullable и LowCardinality, вложенных с Nullable типами.
  • V — Тип значений карты. Произвольный тип.

Примеры

Создайте таблицу с колонкой типа map:

Чтобы выбрать значения key2:

Результат:

Если запрашиваемый ключ k не содержится в карте, m[k] возвращает значение по умолчанию для данного типа, например, 0 для целочисленных типов и '' для строковых типов. Чтобы проверить, существует ли ключ в карте, вы можете использовать функцию mapContains.

Результат:

Преобразование Tuple в Map

Значения типа Tuple() могут быть преобразованы в значения типа Map() с помощью функции CAST:

Пример

Запрос:

Результат:

Чтение подколонок карты

Чтобы избежать чтения всей карты, вы можете использовать подколонки keys и values в некоторых случаях.

Пример

Запрос:

Результат:

См. также