Тип массива
Столбец типа ARRAY хранит массивы фиксированной длины. Все поля в столбце должны иметь одинаковую длину и одинаковый базовый тип. Массивы обычно используются для хранения массивов чисел, но могут содержать любой однородный тип данных, включая ARRAY, LIST и STRUCT типы.
Массивы могут использоваться для хранения векторов, таких как словесные вложения или вложения изображений.
Для хранения списков переменной длины используйте LIST тип. Смотрите обзор типов данных для сравнения вложенных типов данных.
Тип
ARRAYв PostgreSQL позволяет использовать поля переменной длины. ТипARRAYв DuckDB имеет фиксированную длину.
Создание массивов
Массивы можно создать с помощью функции array_value(expr, ...).
Создайте массив с помощью функции array_value:
SELECT array_value(1, 2, 3);
Вы всегда можете неявно преобразовать массив в список (и использовать функции для списков, такие как list_extract, [i]):
SELECT array_value(1, 2, 3)[2];
Вы можете преобразовать список в массив (размерности должны совпадать):
SELECT [3, 2, 1]::INTEGER[3];
Массивы могут быть вложенными:
SELECT array_value(array_value(1, 2), array_value(3, 4), array_value(5, 6));
Массивы могут хранить структуры:
SELECT array_value({'a': 1, 'b': 2}, {'a': 3, 'b': 4}); Определение поля массива
Массивы можно создать, используя синтаксис ⟨TYPE_NAME⟩[⟨LENGTH⟩]. Например, чтобы создать поле массива для 3 целых чисел, выполните:
CREATE TABLE array_table (id INTEGER, arr INTEGER[3]); INSERT INTO array_table VALUES (10, [1, 2, 3]), (20, [4, 5, 6]);
Получение значений из массивов
Получение одного или нескольких значений из массива можно выполнить с помощью квадратных скобок и слайсинга или с помощью функций для списков, таких как list_extract и array_extract. Используя пример в Определение поля массива.
Следующие запросы для извлечения второго элемента массива эквивалентны:
SELECT id, arr[1] AS element FROM array_table; SELECT id, list_extract(arr, 1) AS element FROM array_table; SELECT id, array_extract(arr, 1) AS element FROM array_table;
| id | элемент |
|---|---|
| 10 | 1 |
| 20 | 4 |
Использование слайсинга возвращает LIST:
SELECT id, arr[1:2] AS elements FROM array_table;
| id | элементы |
|---|---|
| 10 | [1, 2] |
| 20 | [4, 5] |
Функции
Все LIST функции работают с типом ARRAY. Кроме того, поддерживаются несколько функций, специфичных для ARRAY. Смотрите ARRAY функции.
Примеры
Создайте данные образца:
CREATE TABLE x (i INTEGER, v FLOAT[3]); CREATE TABLE y (i INTEGER, v FLOAT[3]); INSERT INTO x VALUES (1, array_value(1.0::FLOAT, 2.0::FLOAT, 3.0::FLOAT)); INSERT INTO y VALUES (1, array_value(2.0::FLOAT, 3.0::FLOAT, 4.0::FLOAT));
Вычислите векторное произведение:
SELECT array_cross_product(x.v, y.v) FROM x, y WHERE x.i = y.i;
Вычислите косинусное сходство:
SELECT array_cosine_similarity(x.v, y.v) FROM x, y WHERE x.i = y.i;
Сортировка
Порядок экземпляров ARRAY определяется с помощью лексикографического порядка. Значения NULL больше, чем все остальные значения, и считаются равными друг другу.
См. также
Для получения дополнительных функций см. Функции для списков.
© Copyright 2018–2024 Stichting DuckDB Foundation
Licensed under the MIT License.
https://duckdb.org/docs/sql/data_types/array.html