Datentypen
Allzweck-Datentypen
Die folgende Tabelle zeigt alle eingebauten Allzweck-Datentypen. Die in der Spalte Aliases aufgeführten Alternativen können ebenfalls verwendet werden, um auf diese Typen zu verweisen; beachten Sie jedoch, dass die Aliases nicht Teil des SQL-Standards sind und daher von anderen Datenbank-Engines möglicherweise nicht akzeptiert werden.
| Name | Aliases | Beschreibung |
|---|---|---|
BIGINT |
INT8, LONG |
Vorzeichenbehafteter Acht-Byte-Integer |
BIT |
BITSTRING |
Zeichenkette aus 1en und 0en |
BLOB |
BYTEA, BINARY, VARBINARY |
Binärdaten variabler Länge |
BIGNUM |
Integer variabler Länge | |
BOOLEAN |
BOOL, LOGICAL |
Logischer Boolean (true / false) |
DATE |
Kalenderdatum (Jahr, Monat, Tag) | |
DECIMAL(prec, scale) |
NUMERIC(prec, scale) |
Festkommazahl mit der angegebenen Breite (Präzision) und Skala, Standard prec = 18 und scale = 3 |
DOUBLE |
FLOAT8 |
Gleitkommazahl doppelter Genauigkeit (8 Bytes) |
FLOAT |
FLOAT4, REAL |
Gleitkommazahl einfacher Genauigkeit (4 Bytes) |
HUGEINT |
Vorzeichenbehafteter Sechzehn-Byte-Integer | |
INTEGER |
INT4, INT, SIGNED |
Vorzeichenbehafteter Vier-Byte-Integer |
INTERVAL |
Datums-/Zeitdelta | |
JSON |
JSON-Objekt (über die json-Erweiterung) |
|
SMALLINT |
INT2, SHORT |
Vorzeichenbehafteter Zwei-Byte-Integer |
TIME |
Tageszeit (ohne Zeitzone) | |
TIMESTAMP WITH TIME ZONE |
TIMESTAMPTZ |
Kombination aus Zeit und Datum, die die aktuelle Zeitzone verwendet |
TIMESTAMP |
DATETIME |
Kombination aus Zeit und Datum |
TINYINT |
INT1 |
Vorzeichenbehafteter Ein-Byte-Integer |
UBIGINT |
Vorzeichenloser Acht-Byte-Integer | |
UHUGEINT |
Vorzeichenloser Sechzehn-Byte-Integer | |
UINTEGER |
Vorzeichenloser Vier-Byte-Integer | |
USMALLINT |
Vorzeichenloser Zwei-Byte-Integer | |
UTINYINT |
Vorzeichenloser Ein-Byte-Integer | |
UUID |
UUID-Datentyp | |
VARCHAR |
CHAR, BPCHAR, TEXT, STRING |
Zeichenkette variabler Länge |
Implizites und explizites Typecasting ist zwischen zahlreichen Typen möglich, Details finden Sie auf der Seite Typumwandlung.
Verschachtelte / zusammengesetzte Typen
DuckDB unterstützt fünf verschachtelte Datentypen: ARRAY, LIST, MAP, STRUCT und UNION. Jeder unterstützt unterschiedliche Anwendungsfälle und hat eine andere Struktur.
| Name | Beschreibung | Regeln bei Verwendung in einer Spalte | Aus Werten erzeugen | In DDL/CREATE definieren |
|---|---|---|---|---|
ARRAY |
Eine geordnete Folge fester Länge von Datenwerten desselben Typs. | Jede Zeile muss innerhalb jeder Instanz des ARRAY denselben Datentyp und dieselbe Anzahl von Elementen haben. |
[1, 2, 3] |
INTEGER[3] |
LIST |
Eine geordnete Folge von Datenwerten desselben Typs. | Jede Zeile muss innerhalb jeder Instanz der LIST denselben Datentyp haben, kann aber eine beliebige Anzahl von Elementen haben. |
[1, 2, 3] |
INTEGER[] |
MAP |
Ein Dictionary mehrerer benannter Werte, wobei jeder Schlüssel denselben Typ und jeder Wert denselben Typ hat. Schlüssel und Werte können beliebige Typen sein und sich voneinander unterscheiden. | Zeilen können unterschiedliche Schlüssel haben. | map([1, 2], ['a', 'b']) |
MAP(INTEGER, VARCHAR) |
STRUCT |
Ein Dictionary mehrerer benannter Werte, wobei jeder Schlüssel eine Zeichenkette ist, der Wert aber für jeden Schlüssel einen anderen Typ haben kann. | Jede Zeile muss dieselben Schlüssel haben. | {'i': 42, 'j': 'a'} |
STRUCT(i INTEGER, j VARCHAR) |
UNION |
Eine Vereinigung mehrerer alternativer Datentypen, von denen jeweils einer in einem Wert gespeichert wird. Eine Union enthält außerdem einen Diskriminator-„Tag“-Wert, um den aktuell gesetzten Member-Typ zu prüfen und darauf zuzugreifen. | Zeilen können auf unterschiedliche Member-Typen der Union gesetzt sein. | union_value(num := 2) |
UNION(num INTEGER, text VARCHAR) |
VARIANT |
Ein semistrukturierter Typ, bei dem jeder Wert selbstbeschreibend ist und eigene Typinformationen enthält. | Jede Zeile kann einen Wert eines anderen Typs enthalten. | 42::VARIANT |
VARIANT |
Regeln zur Groß-/Kleinschreibung
Die Schlüssel von MAPs unterscheiden Groß- und Kleinschreibung, während Schlüssel von UNIONs und STRUCTs unabhängig von der Groß-/Kleinschreibung sind.
Beispiele finden Sie im Abschnitt zu den Regeln zur Groß-/Kleinschreibung.
Werte verschachtelter Typen aktualisieren
Beim Aktualisieren von Werten verschachtelter Typen führt DuckDB eine Lösch-Operation gefolgt von einer Einfüge-Operation durch. In einer Tabelle mit ART-Indizes (entweder über explizite Indizes oder Primärschlüssel/Unique-Constraints) kann das zu unerwarteten Constraint-Verletzungen führen.
Verschachtelung
Die Typen ARRAY, LIST, MAP, STRUCT und UNION können beliebig tief verschachtelt werden, solange die Typregeln eingehalten werden.
Struct mit LISTs:
SELECT {'birds': ['duck', 'goose', 'heron'], 'aliens': NULL, 'amphibians': ['frog', 'toad']};Struct mit einer Liste von MAPs:
SELECT {'test': [MAP([1, 5], [42.1, 45]), MAP([1, 5], [42.1, 45])]};Eine Liste von UNIONs:
SELECT [union_value(num := 2), union_value(str := 'ABC')::UNION(str VARCHAR, num INTEGER)];Auswirkungen auf die Leistung
Die Wahl der Datentypen kann die Leistung stark beeinflussen. Details finden Sie im Performance-Leitfaden.