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_col

duckdb.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_col

duckdb.map

Ассоциативный массив, из которого необходимо извлечь значение

key

duckdb.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_col

duckdb.map

Первый ассоциативный массив для объединения

map_col2

duckdb.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_col

duckdb.map

Ассоциативный массив, в котором необходимо проверить ключ

key

duckdb.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_col

duckdb.map

Ассоциативный массив, в котором необходимо проверить пару ключ-значение

key

duckdb.unresolved_type

Ключ, который необходимо проверить

value

duckdb.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_col

duckdb.map

Ассоциативный массив, в котором необходимо проверить значение

value

duckdb.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_col

duckdb.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_col

duckdb.map

Ассоциативный массив, из которого необходимо извлечь значение

key

duckdb.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_col

duckdb.map

Ассоциативный массив, из которого необходимо извлечь значение

key

duckdb.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}

Обязательные параметры:

Имя

Тип

Описание

entries

duckdb.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_col

duckdb.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_col

duckdb.map

Ассоциативный массив, из которого необходимо извлечь значения