Datentypen von Iceberg-Tabellen¶
Unter diesem Thema finden Sie Informationen darüber, wie Datentypen für Iceberg-Tabellen in Snowflake funktionieren.
Wie Datentypen für Iceberg-Tabellen funktionieren¶
Snowflake unterstützt die meisten der in der Apache Iceberg-Spezifikation definierten Datentypen und schreibt Iceberg-Datentypen in Tabellendateien, sodass bei Verwendung von Snowflake als Katalog Ihre Iceberg-Tabellen über verschiedene Computemodule hinweg interoperabel bleiben.
Eine Übersicht zu den von Snowflake unterstützten Iceberg-Datentypen finden Sie unter Unterstützte Datentypen für Iceberg-Tabellen.
Iceberg-Typen zur Definition von Spalten verwenden¶
Wenn Sie eine Iceberg-Tabelle erstellen, die Snowflake als Katalog verwendet, können Sie Iceberg-Datentypen zur Definition von Spalten verwenden.
Beispiel:
CREATE OR REPLACE ICEBERG TABLE my_iceberg_table (
boolean_col boolean,
int_col int,
long_col long,
float_col float,
double_col double,
decimal_col decimal(10,5),
string_col string,
fixed_col fixed(10),
binary_col binary,
date_col date,
time_col time,
timestamp_ntz_col timestamp_ntz(6),
timestamp_ltz_col timestamp_ltz(6)
)
CATALOG = 'SNOWFLAKE'
EXTERNAL_VOLUME = 'my_ext_vol'
BASE_LOCATION = 'my/relative/path/from/extvol';
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 für Iceberg-Tabellen.
Unterstützte Datentypen für Iceberg-Tabellen¶
Die folgende Tabelle zeigt die Beziehung zwischen Iceberg-Datentypen und Snowflake-Datentypen. Sie verwendet die folgenden Spalten:
- 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.
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. |
|
|
Synonym für den Snowflake-Datentyp DOUBLE. Snowflake behandelt alle Gleitkommazahlen als doppeltgenaue 64-Bit-Gleitkommazahlen. |
|
|
||
|
||
|
Genauigkeit im Mikrosekundenbereich. Iceberg-Tabellen unterstützen keine anderen Genauigkeiten wie Millisekunden oder Nanosekunden. |
|
|
Genauigkeit im Mikrosekundenbereich. Iceberg-Tabellen unterstützen keine anderen Genauigkeiten wie Millisekunden oder Nanosekunden. Snowflake unterstützt nicht die Verwendung des veralteten physischen Parquet-Typs |
|
|
Genauigkeit im Mikrosekundenbereich. Iceberg-Tabellen unterstützen keine anderen Genauigkeiten wie Millisekunden oder Nanosekunden. |
|
|
||
|
Der Datentyp Wenn Sie einen externen Katalog verwenden oder eine Tabelle aus Dateien im Objektspeicher erstellen, ordnet Snowflake den Iceberg-Typ |
|
|
Sie können eine Iceberg-Tabelle mit diesem Typ erstellen, aber Sie können keine Tabelle konvertieren, die eine Spalte vom 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. |
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.
Die Verwendung des veralteten physischen Parquet-Typs
int96
für Zeitstempel wird nicht unterstützt.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.