Spec-Zone.ru › DuckDB

Типы данных

Общие типы данных

В таблице ниже представлены все встроенные общие типы данных. Альтернативы, указанные в столбце псевдонимов, также могут использоваться для ссылки на эти типы, однако обратите внимание, что псевдонимы не являются частью стандарта SQL и, следовательно, могут не поддерживаться другими базами данных.

Имя Псевдонимы Описание
BIGINT INT8, LONG целое восьмибайтовое со знаком
BIT BITSTRING строка из 1 и 0
BLOB BYTEA, BINARY, VARBINARY двоичные данные переменной длины
BOOLEAN BOOL, LOGICAL логический булевый тип (true/false)
DATE дата календаря (год, месяц, день)
DECIMAL(prec, scale) NUMERIC(prec, scale) число с фиксированной точностью заданной шириной (точностью) и масштабом, по умолчанию prec = 18 и scale = 3
DOUBLE FLOAT8, число с плавающей запятой двойной точности (8 байт)
FLOAT FLOAT4, REAL число с плавающей запятой одинарной точности (4 байта)
HUGEINT целое шестнадцатибайтовое со знаком
INTEGER INT4, INT, SIGNED целое четырехбайтовое со знаком
INTERVAL разница дат/времени
JSON объект JSON (через расширение json)
SMALLINT INT2, SHORT целое двухбайтовое со знаком
TIME время суток (без часового пояса)
TIMESTAMP WITH TIME ZONE TIMESTAMPTZ комбинация времени и даты, использующая текущий часовой пояс
TIMESTAMP DATETIME комбинация времени и даты
TINYINT INT1 целое однобайтовое со знаком
UBIGINT целое восьмибайтовое без знака
UHUGEINT целое шестнадцатибайтовое без знака
UINTEGER целое четырехбайтовое без знака
USMALLINT целое двухбайтовое без знака
UTINYINT целое однобайтовое без знака
UUID тип данных UUID
VARCHAR CHAR, BPCHAR, TEXT, STRING строка символов переменной длины

Неявное и явное приведение типов возможно между многими типами, см. страницу Приведение типов для получения подробностей.

Вложенные/Составные типы

DuckDB поддерживает пять вложенных типов данных: ARRAY, LIST, MAP, STRUCT, и UNION. Каждый из них поддерживает различные варианты использования и имеет различную структуру.

Имя Описание Правила при использовании в столбце Создание из значений Определение в DDL/CREATE
ARRAY Упорядоченная, фиксированной длины последовательность значений данных одного типа. В каждой строке должен быть один и тот же тип данных в каждом экземпляре ARRAY и одинаковое количество элементов. [1, 2, 3] INTEGER[3]
LIST Упорядоченная последовательность значений данных одного типа. В каждой строке должен быть один и тот же тип данных в каждом экземпляре LIST, но количество элементов может быть любым. [1, 2, 3] INTEGER[]
MAP Словарь из нескольких именованных значений, где каждый ключ имеет один и тот же тип, а каждое значение — один и тот же тип. Ключи и значения могут быть любого типа и могут быть различными типами. Строки могут иметь разные ключи. map([1, 2], ['a', 'b']) MAP(INTEGER, VARCHAR)
STRUCT Словарь из нескольких именованных значений, где каждый ключ — строка, но значение может быть разного типа для каждого ключа. В каждой строке должны быть одни и те же ключи. {'i': 42, 'j': 'a'} STRUCT(i INTEGER, j VARCHAR)
UNION Объединение нескольких альтернативных типов данных, хранящее один из них в каждом значении одновременно. Объединение также содержит дискриминатор «тег» для проверки и доступа к текущему типу члена. Строки могут быть установлены на разные типы членов объединения. union_value(num := 2) UNION(num INTEGER, text VARCHAR)

Обновление значений вложенных типов

При выполнении обновлений значений вложенных типов DuckDB выполняет операцию удаления, за которой следует операция вставки. При использовании в таблице с индексами ART (либо явными индексами, либо первичными ключами/уникальными ограничениями) это может привести к неожиданным нарушениям ограничений. Например:

CREATE TABLE students (id INTEGER PRIMARY KEY, name VARCHAR);
INSERT INTO students VALUES (1, 'Student 1');

UPDATE tbl
    SET j = [2]
    WHERE i = 1;
Constraint Error: Duplicate key "i: 1" violates primary key constraint.
If this is an unexpected constraint violation please double check with the known index limitations section in our documentation (https://duckdb.org/docs/sql/indexes).

Вложенность

ARRAY, LIST, MAP, STRUCT, и UNION типы могут быть произвольно вложены на любую глубину, при соблюдении правил типа.

Структура со LIST:

SELECT {'birds': ['duck', 'goose', 'heron'], 'aliens': NULL, 'amphibians': ['frog', 'toad']};

Структура со списком MAP:

SELECT {'test': [MAP([1, 5], [42.1, 45]), MAP([1, 5], [42.1, 45])]};

Список UNION:

SELECT [union_value(num := 2), union_value(str := 'ABC')::UNION(str VARCHAR, num INTEGER)];

Последствия для производительности

Выбор типов данных может сильно повлиять на производительность. Подробнее см. Руководство по производительности.

Страницы в этом разделе

© Copyright 2018–2024 Stichting DuckDB Foundation
Licensed under the MIT License.
https://duckdb.org/docs/sql/data_types/overview.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API