Datentypen für Apache Iceberg™-Tabellen¶
Snowflake unterstützt die meisten der in der Apache Iceberg™-Spezifikation definierten Datentypen und schreibt Iceberg-Datentypen in Tabellendateien, sodass Ihre Iceberg-Tabellen über verschiedene Compute Engines hinweg interoperabel bleiben, wenn Sie Snowflake als Katalog verwenden.
Eine Übersicht zu den von Snowflake unterstützten Iceberg-Datentypen finden Sie unter Unterstützte Datentypen.
Ungefähre Typen¶
Wenn Ihre Tabelle einen Iceberg-Datentyp verwendet, für den Snowflake keine exakte Übereinstimmung unterstützt, verwendet Snowflake einen ungefähr übereinstimmenden Snowflake-Datentyp. Diese Typzuordnung betrifft Spaltenwerte von konvertierten Tabellen und Iceberg-Tabellen, die Snowflake als Katalog verwenden.
Betrachten Sie beispielsweise eine Tabelle mit einer Spalte vom Iceberg-Typ int
. Snowflake verarbeitet die Spaltenwerte mit dem Snowflake-Datentyp NUMBER(10,0).
NUMBER(10,0) hat einen Bereich von (-9.999.999.999, +9.999.999.999), aber int
hat einen engeren Bereich von (-2.147.483.648, +2.147.483.647). Wenn Sie versuchen, einen Wert von 3.000.000.000 in diese Spalte einzufügen, gibt Snowflake eine Fehlermeldung zurück, dass der Wert außerhalb des Bereichs liegt.
Weitere Informationen zu ungefähren Datentypen finden Sie in den Anmerkungen unter Unterstützte Datentypen.
Unterstützte Datentypen¶
Die Tabellen in diesem Abschnitt zeigen die Beziehung zwischen Iceberg-Datentypen und Snowflake-Datentypen. Es werden die folgenden Spalten verwendet:
- Iceberg-Typ:
Der in der Apache Iceberg-Spezifikation definierte Datentyp. Wenn Sie Snowflake als Katalog verwenden, schreibt Snowflake den Iceberg-Typ in Ihre Tabellendateien, sodass Ihre Tabellen über verschiedene Computemodule hinweg interoperabel bleiben.
- Snowflake-Typ:
Der Snowflake-Datentyp, der für die Verarbeitung und Rückgabe von Tabellendaten verwendet wird. Wenn Ihr Schema beispielsweise den Iceberg-Typ
timestamp
angibt, verarbeitet und liefert Snowflake Werte mit dem Snowflake-Datentyp TIMESTAMP_NTZ(6) mit Mikrosekundengenauigkeit.- Anmerkungen:
Zusätzliche Nutzungshinweise, einschließlich Hinweise zur Verwendung von ungefähren Datentypen.
Numerische Datentypen¶
Snowflake als Iceberg-Katalog¶
Die folgende Tabelle zeigt, wie die numerischen Datentypen von Iceberg den numerischen Datentypen von Snowflake für Tabellen zugeordnet werden, die Snowflake als Iceberg-Katalog verwenden (Snowflake-verwaltete Tabellen). Wenn Sie eine Snowflake-verwaltete Iceberg-Tabelle erstellen, können Sie Iceberg-Datentypen verwenden, um numerische Spalten zu definieren.
Iceberg-Datentyp |
Snowflake-Datentyp |
Anmerkungen |
---|---|---|
|
Das Einfügen einer 10-stelligen Zahl, die kleiner als der minimale oder größer als der maximale 32-Bit-Wert einer vorzeichenbehafteten Ganzzahl ist, führt zu einem Out-of-Range-Fehler. |
|
|
Das Einfügen einer 19-stelligen Zahl, die kleiner als der minimale oder größer als der maximale 64-Bit-Wert einer vorzeichenbehafteten Ganzzahl ist, führt zu einem Out-of-Range-Fehler. |
|
|
Synonym für den Snowflake-Datentyp DOUBLE. Snowflake behandelt alle Gleitkommazahlen als doppeltgenaue 64-Bit-Gleitkommazahlen, schreibt aber Iceberg-Gleitkommazahlen als 32-Bit-Gleitkommazahlen in Tabellendateien. Eine Verengung der Konvertierung von 64 Bit auf 32 Bit führt zu einem Genauigkeitsverlust. Sie können |
|
|
Synonym für den Snowflake-Datentyp DOUBLE. Snowflake behandelt alle Gleitkommazahlen als doppeltgenaue 64-Bit-Gleitkommazahlen. Eine Verengung der Konvertierung von 64 Bit auf 32 Bit führt zu einem Genauigkeitsverlust. Sie können |
|
|
Die Angabe von |
Externer Katalog¶
Wenn Sie eine Iceberg-Tabelle erstellen, die einen externen Iceberg-Katalog verwendet, werden die numerischen Typen von Iceberg den numerischen Typen von Snowflake gemäß der folgenden Tabelle zugeordnet.
Iceberg-Datentyp |
Snowflake-Datentyp |
---|---|
|
|
|
|
|
|
|
|
|
Bemerkung
Sie können float
oder double
nicht als Primärschlüssel verwenden (in Übereinstimmung mit der Apache Iceberg-Spezifikation).
Andere Datentypen¶
Iceberg-Datentyp |
Snowflake-Datentyp |
Anmerkungen |
---|---|---|
|
||
|
||
|
Genauigkeit im Mikrosekundenbereich gemäß der Spezifikation der Apache Iceberg-Tabelle. |
|
|
TIMESTAMP_NTZ(6) oder TIMESTAMP_LTZ(6), abhängig vom Wert des Snowflake-Parameters TIMESTAMP_TYPE_MAPPING. |
Genauigkeit im Mikrosekundenbereich gemäß der Spezifikation der Apache Iceberg-Tabelle. Sie können auch den physischen Parquet-Typ |
|
Genauigkeit im Mikrosekundenbereich gemäß der Spezifikation der Apache Iceberg-Tabelle. Sie können auch den physischen Parquet-Typ |
|
|
||
|
Der Datentyp Wenn Sie einen externen Katalog verwenden oder eine Tabelle aus Dateien im Objektspeicher erstellen, ordnet Snowflake den Iceberg-Typ |
|
|
Spalten vom strukturierten Typ unterstützen maximal 1.000 Unterspalten. |
|
|
Spalten vom strukturierten Typ unterstützen maximal 1.000 Unterspalten. |
|
|
Spalten vom strukturierten Typ unterstützen maximal 1.000 Unterspalten. |
Delta-Datentypen¶
Die folgende Tabelle zeigt die Zuordnung von Delta-Datentypen zu Snowflake-Datentypen für Iceberg-Tabellen, die aus Delta-Tabellendateien erstellt wurden.
Deltatyp |
Snowflake-Datentyp |
---|---|
BYTE |
NUMBER(3,0) |
SHORT |
NUMBER(5,0) |
INTEGER |
NUMBER(10,0) |
LONG |
NUMBER(20,0) |
FLOAT |
REAL |
DOUBLE |
REAL |
TIMESTAMP |
TIMESTAMP_LTZ(6) |
TIMESTAMP_NTZ |
TIMESTAMP_NTZ(6) |
BINARY |
BINARY |
STRING |
TEXT |
BOOLEAN |
BOOLEAN |
DECIMAL(P,S) |
NUMBER(P,S) |
Die folgende Tabelle zeigt, wie die verschachtelten Delta-Datentypen den Snowflake-Datentypen zugeordnet werden.
Delta verschachtelter Typ |
Snowflake-Datentyp |
---|---|
STRUCT |
|
ARRAY |
|
MAP |
Hinweise¶
Beachten Sie die folgenden Punkte, wenn Sie Datentypen für Iceberg-Tabellen verwenden:
Das Konvertieren einer Tabelle mit Spalten, die die folgenden Iceberg-Datentypen verwenden, wird nicht unterstützt:
uuid
fixed(L)
Bei Tabellen, die Snowflake als Katalog verwenden, wird das Erstellen einer Tabelle, die den Iceberg-Datentyp
uuid
verwendet, nicht unterstützt.Für alle Iceberg-Tabellentypen gilt:
Spalten vom strukturierten Typ unterstützen maximal 1.000 Unterspalten.
Iceberg unterstützt Mikrosekundengenauigkeit für Zeit- und Zeitstempeltypen. Folglich können Sie in Snowflake keine Iceberg-Tabelle erstellen, die eine andere Genauigkeit wie z. B. Millisekunden oder Nanosekunden verwendet.
Sie können
float
oderdouble
nicht als Primärschlüssel verwenden (in Übereinstimmung mit der Apache Iceberg-Spezifikation).
Für Tabellen, die aus Delta-Dateien erstellt wurden:
Parquet-Dateien (Datendateien für Delta-Tabellen), die eines der folgenden Features oder Datentypen verwenden, werden nicht unterstützt:
Feld-IDs
Der Datentyp INTERVAL.
Der Datentyp DECIMAL mit einer Präzision von mehr als 38.
LIST oder MAP-Typen mit ein- oder zweistufiger Darstellung.
Ganzzahl-Typen ohne Vorzeichen (INT(vorzeichenbehaftet = falsch)).
Der Datentyp FLOAT16.