Тип карты
MAP похожи на STRUCT в том, что они представляют собой упорядоченный список «записей», где ключ сопоставлен со значением. Однако MAP не требуют наличия одинаковых ключей в каждой строке и поэтому подходят для других случаев использования. MAP полезны, когда схема заранее неизвестна или когда схема меняется в каждой строке; их гибкость является ключевым отличием.
MAP должны иметь один тип для всех ключей и один тип для всех значений. Ключи и значения могут быть любого типа, и тип ключей не обязательно должен совпадать с типом значений (например, MAP из VARCHAR в INT допустимо). MAP не могут содержать дублирующихся ключей. MAP возвращают пустой список, если ключ не найден, вместо того, чтобы генерировать ошибку, как это делают структуры.
В отличие от STRUCT должны иметь строковые ключи, но каждое значение ключа может иметь тип, отличающийся от других. См. обзор типов данных для сравнения вложенных типов данных.
Для создания MAP используйте синтаксис в квадратных скобках, предваряемый ключевым словом MAP.
Создание карт
Карта с VARCHAR ключами и INTEGER значениями. Это возвращает {key1=10, key2=20, key3=30}:
SELECT MAP {'key1': 10, 'key2': 20, 'key3': 30}; В качестве альтернативы можно использовать функцию map_from_entries. Это возвращает {key1=10, key2=20, key3=30}:
SELECT map_from_entries([('key1', 10), ('key2', 20), ('key3', 30)]); Карту также можно создать, используя два списка: ключи и значения. Это возвращает {key1=10, key2=20, key3=30}:
SELECT MAP(['key1', 'key2', 'key3'], [10, 20, 30]);
Карта также может использовать целочисленные ключи и числовые значения. Это возвращает {1=42.001, 5=-32.100}:
SELECT MAP {1: 42.001, 5: -32.1}; Ключи и/или значения также могут быть вложенными типами. Это возвращает {[a, b]=[1.1, 2.2], [c, d]=[3.3, 4.4]}:
SELECT MAP {['a', 'b']: [1.1, 2.2], ['c', 'd']: [3.3, 4.4]}; Создайте таблицу со столбцом карты, содержащим целочисленные ключи и двойные значения:
CREATE TABLE tbl (col MAP(INTEGER, DOUBLE));
Получение из карт
MAP используют квадратные скобки для извлечения значений. Выбор из MAP возвращает LIST вместо отдельного значения, при этом пустой LIST означает, что ключ не был найден.
Используйте квадратные скобки для извлечения списка, содержащего значение в позиции ключа. Это возвращает [5]. Обратите внимание, что выражение в квадратных скобках должно соответствовать типу ключа карты:
SELECT MAP {'key1': 5, 'key2': 43}['key1']; Для извлечения базового значения используйте синтаксис выбора списка для извлечения первого элемента. Это возвращает 5:
SELECT MAP {'key1': 5, 'key2': 43}['key1'][1]; Если элемент отсутствует в карте, будет возвращен пустой список. Это возвращает []. Обратите внимание, что выражение в квадратных скобках должно соответствовать типу ключа карты, в противном случае возвращается ошибка:
SELECT MAP {'key1': 5, 'key2': 43}['key3']; Функция element_at также может использоваться для извлечения значения карты. Это возвращает [5]:
SELECT element_at(MAP {'key1': 5, 'key2': 43}, 'key1'); Операторы сравнения
Вложенные типы можно сравнивать с помощью всех операторов сравнения. Эти сравнения могут использоваться в логических выражениях для обоих WHERE и HAVING разделов, а также для создания Булевых значений.
Порядок определяется позиционно так же, как слова можно упорядочить в словаре. NULL значения сравниваются больше, чем все остальные значения, и считаются равными друг другу.
На верхнем уровне NULL вложенные значения подчиняются стандартным правилам сравнения SQL NULL: сравнение NULL вложенного значения с не-NULL вложенным значением дает NULL результат. Однако сравнение элементов вложенного значения использует внутренние правила для NULL и NULL вложенное значение будет сравниваться выше не-NULL вложенного значения.
Функции
См. Функции карт.
© Copyright 2018–2024 Stichting DuckDB Foundation
Licensed under the MIT License.
https://duckdb.org/docs/sql/data_types/map.html