Типы данных
Общие типы данных
В таблице ниже представлены все встроенные общие типы данных. Альтернативы, указанные в столбце псевдонимов, также могут использоваться для ссылки на эти типы, однако обратите внимание, что псевдонимы не являются частью стандарта 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