21.4. Функции для работы с ассоциативными массивами #
-
cardinality(map_col duckdb.map) returns#numeric Возвращает размер ассоциативного массива (количество пар ключ-значение).
Пример 21.7.
-- Получить количество записей в ассоциативном массиве SELECT cardinality(r['map_col']) as size FROM duckdb.query($$ SELECT MAP(['a', 'b', 'c'], [1, 2, 3]) as map_col $$) r; -- Возвращает: 3 -- Пустой ассоциативный массив SELECT cardinality(r['map_col']) as size FROM duckdb.query($$ SELECT MAP([], []) as map_col $$) r; -- Возвращает: 0
Обязательные параметры:
Имя
Тип
Описание
map_colduckdb.mapАссоциативный массив, размер которого необходимо получить
-
element_at(map_col duckdb.map, key duckdb.unresolved_type) returns#duckdb.unresolved_type Возвращает значение по указанному ключу в виде массива.
Пример 21.8.
-- Получить значение для определённого ключа SELECT element_at(r['map_col'], 'a') as value FROM duckdb.query($$ SELECT MAP(['a', 'b'], [1, 2]) as map_col $$) r; -- Возвращает: {1} -- Несуществующий ключ SELECT element_at(r['map_col'], 'c') as value FROM duckdb.query($$ SELECT MAP(['a', 'b'], [1, 2]) as map_col $$) r; -- Возвращает: {}Обязательные параметры:
Имя
Тип
Описание
map_colduckdb.mapАссоциативный массив, из которого необходимо извлечь значение
keyduckdb.unresolved_typeКлюч, для которого необходимо извлечь значение
-
map_concat(map_col duckdb.map, map_col2 duckdb.map) returns#duckdb.map Объединяет два ассоциативных массива. При конфликте ключей значение берётся из последнего ассоциативного массива.
Пример 21.9.
-- Объединить два ассоциативных массива SELECT map_concat(r1['map1'], r2['map2']) as merged FROM duckdb.query($$ SELECT MAP(['a', 'b'], [1, 2]) as map1 $$) r1, duckdb.query($$ SELECT MAP(['b', 'c'], [3, 4]) as map2 $$) r2; -- Возвращает: {a=1, b=3, c=4} -- Примечание: значение 'b' из map2 (3) заменяет значение (2) из map1Обязательные параметры:
Имя
Тип
Описание
map_colduckdb.mapПервый ассоциативный массив для объединения
map_col2duckdb.mapВторой ассоциативный массив для объединения
-
map_contains(map_col duckdb.map, key duckdb.unresolved_type) returns#boolean Проверяет, содержит ли ассоциативный массив указанный ключ.
Пример 21.10.
-- Проверить, существует ли ключ SELECT map_contains(r['map_col'], 'a') as has_key FROM duckdb.query($$ SELECT MAP(['a', 'b'], [1, 2]) as map_col $$) r; -- Возвращает: t (true) -- Проверить отсутствующий ключ SELECT map_contains(r['map_col'], 'c') as has_key FROM duckdb.query($$ SELECT MAP(['a', 'b'], [1, 2]) as map_col $$) r; -- Возвращает: f (false)
Обязательные параметры:
Имя
Тип
Описание
map_colduckdb.mapАссоциативный массив, в котором необходимо проверить ключ
keyduckdb.unresolved_typeКлюч, который необходимо проверить
-
map_contains_entry(map_col duckdb.map, key duckdb.unresolved_type, value duckdb.unresolved_type)#boolean Проверяет, содержит ли ассоциативный массив указанную пару ключ-значение.
Пример 21.11.
-- Проверить наличие пары ключ-значение SELECT map_contains_entry(r['map_col'], 'a', 1) as has_entry FROM duckdb.query($$ SELECT MAP(['a', 'b'], [1, 2]) as map_col $$) r; -- Возвращает: t (true) -- Проверить наличие записи с неправильным значением у существующего ключа SELECT map_contains_entry(r['map_col'], 'a', 2) as has_entry FROM duckdb.query($$ SELECT MAP(['a', 'b'], [1, 2]) as map_col $$) r; -- Возвращает: f (false)
Обязательные параметры:
Имя
Тип
Описание
map_colduckdb.mapАссоциативный массив, в котором необходимо проверить пару ключ-значение
keyduckdb.unresolved_typeКлюч, который необходимо проверить
valueduckdb.unresolved_typeЗначение, которое необходимо проверить
-
map_contains_value(map_col duckdb.map, value duckdb.unresolved_type) returns#boolean Проверяет, содержит ли ассоциативный массив указанное значение.
Пример 21.12.
-- Проверить наличие значения SELECT map_contains_value(r['map_col'], 1) as has_value FROM duckdb.query($$ SELECT MAP(['a', 'b'], [1, 2]) as map_col $$) r; -- Возвращает: t (true) -- Проверить несуществующее значение SELECT map_contains_value(r['map_col'], 3) as has_value FROM duckdb.query($$ SELECT MAP(['a', 'b'], [1, 2]) as map_col $$) r; -- Возвращает: f (false)
Обязательные параметры:
Имя
Тип
Описание
map_colduckdb.mapАссоциативный массив, в котором необходимо проверить значение
valueduckdb.unresolved_typeЗначение, которое необходимо проверить
-
map_entries(map_col duckdb.map) returns#duckdb.struct[] Возвращает массив struct (key, value) для каждой пары ключ-значение в ассоциативном массиве.
Пример 21.13.
-- Получить все пары ключ-значение в виде struct SELECT map_entries(r['map_col']) as entries FROM duckdb.query($$ SELECT MAP(['a', 'b'], [1, 2]) as map_col $$) r; -- Возвращает: {"(a,1)","(b,2)"} -- Получить доступ к отдельным полям типа struct SELECT unnest(map_entries(r['map_col'])) as entry FROM duckdb.query($$ SELECT MAP(['a', 'b'], [1, 2]) as map_col $$) r;Обязательные параметры:
Имя
Тип
Описание
map_colduckdb.mapАссоциативный массив, из которого необходимо извлечь массивы struct
-
map_extract(map_col duckdb.map, key duckdb.unresolved_type) returns#duckdb.unresolved_type Извлекает значение из ассоциативного массива по указанному ключу. Если ключ не существует, возвращает пустой массив.
Пример 21.14.
-- Извлечь значение из ассоциативного массива SELECT map_extract(r['map_col'], 'a') as value FROM duckdb.query($$ SELECT MAP(['a', 'b'], [1, 2]) as map_col $$) r; -- Возвращает: {1} -- Извлечь несуществующий ключ SELECT map_extract(r['map_col'], 'c') as value FROM duckdb.query($$ SELECT MAP(['a', 'b'], [1, 2]) as map_col $$) r; -- Возвращает: {}Обязательные параметры:
Имя
Тип
Описание
map_colduckdb.mapАссоциативный массив, из которого необходимо извлечь значение
keyduckdb.unresolved_typeКлюч, который необходимо использовать для извлечения значения
-
map_extract_value(map_col duckdb.map, key duckdb.unresolved_type) returns#duckdb.unresolved_type Возвращает значение для указанного ключа или NULL, если ключ отсутствует в ассоциативном массиве.
Пример 21.15.
-- Извлечь одно значение (не в виде массива) SELECT map_extract_value(r['map_col'], 'a') as value FROM duckdb.query($$ SELECT MAP(['a', 'b'], [1, 2]) as map_col $$) r; -- Возвращает: 1 -- Несуществующий ключ возвращает значение NULL SELECT map_extract_value(r['map_col'], 'c') as value FROM duckdb.query($$ SELECT MAP(['a', 'b'], [1, 2]) as map_col $$) r; -- Возвращает: NULL
Обязательные параметры:
Имя
Тип
Описание
map_colduckdb.mapАссоциативный массив, из которого необходимо извлечь значение
keyduckdb.unresolved_typeКлюч, для которого необходимо извлечь значение
-
map_from_entries(entries duckdb.struct[]) returns#duckdb.map Создаёт ассоциативный массив из массива struct (k, v).
Пример 21.16.
-- Создать ассоциативный массив из массива данных типа struct SELECT map_from_entries(r['entries']) as new_map FROM duckdb.query($$ SELECT [{'k': 'a', 'v': 1}, {'k': 'b', 'v': 2}] as entries $$) r; -- Возвращает: {a=1, b=2} -- Операция, обратная map_entries SELECT map_from_entries(map_entries(r['map_col'])) as reconstructed FROM duckdb.query($$ SELECT MAP(['x', 'y'], [10, 20]) as map_col $$) r; -- Возвращает: {x=10, y=20}Обязательные параметры:
Имя
Тип
Описание
entriesduckdb.struct[]Массив значений struct с полями 'k' (ключ) и 'v' (значение)
-
map_keys(map_col duckdb.map) returns#duckdb.unresolved_type Возвращает все ключи из ассоциативного массива в виде массива.
Пример 21.17.
-- Получить все ключи из ассоциативного массива SELECT map_keys(r['map_col']) as keys FROM duckdb.query($$ SELECT MAP(['a', 'b', 'c'], [1, 2, 3]) as map_col $$) r; -- Возвращает: {a,b,c} -- Пустой ассоциативный массив SELECT map_keys(r['map_col']) as keys FROM duckdb.query($$ SELECT MAP([], []) as map_col $$) r; -- Возвращает: {}Обязательные параметры:
Имя
Тип
Описание
map_colduckdb.mapАссоциативный массив, из которого необходимо извлечь ключи
-
map_values(map_col duckdb.map) returns#duckdb.unresolved_type Возвращает все значения из ассоциативного массива в виде массива.
Пример 21.18.
-- Получить все значения из ассоциативного массива SELECT map_values(r['map_col']) as values FROM duckdb.query($$ SELECT MAP(['a', 'b', 'c'], [1, 2, 3]) as map_col $$) r; -- Возвращает: {1,2,3} -- Пустой ассоциативный массив SELECT map_values(r['map_col']) as values FROM duckdb.query($$ SELECT MAP([], []) as map_col $$) r; -- Возвращает: {}Обязательные параметры:
Имя
Тип
Описание
map_colduckdb.mapАссоциативный массив, из которого необходимо извлечь значения