Zum Inhalt springen

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.