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

int (vorzeichenbehaftete 32-Bit-Ganzzahl)

NUMBER(10,0)

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.

long (vorzeichenbehaftete 64-Bit-Ganzzahl)

NUMBER(19,0)

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.

float (32-Bit-Gleitkommazahl mit einfacher Genauigkeit nach IEEE 754)

FLOAT

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 float oder double nicht als Primärschlüssel verwenden (in Übereinstimmung mit der Apache Iceberg-Spezifikation).

double (64-Bit-Gleitkomma mit doppelter Genauigkeit nach IEEE 754)

FLOAT

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 float oder double nicht als Primärschlüssel verwenden (in Übereinstimmung mit der Apache Iceberg-Spezifikation).

decimal(P,S)

NUMBER[(P,S)]

Die Angabe von decimal(10,0) anstelle von int erzeugt einen Dezimaltyp in Iceberg. Dasselbe gilt, wenn Sie decimal(19,0) angeben.

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

int (vorzeichenbehaftete 32-Bit-Ganzzahl)

NUMBER(10,0)

long (vorzeichenbehaftete 64-Bit-Ganzzahl)

NUMBER(19,0)

float (32-Bit-Gleitkommazahl mit einfacher Genauigkeit nach IEEE 754)

FLOAT

double (64-Bit-Gleitkomma mit doppelter Genauigkeit nach IEEE 754)

FLOAT

decimal(P,S)

NUMBER[(P,S)]

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

boolean

BOOLEAN

date

DATE

time

TIME(6)

Genauigkeit im Mikrosekundenbereich gemäß der Spezifikation der Apache Iceberg-Tabelle.

timestamp

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 int96 für Zeitstempel verwenden. Snowflake übersetzt timestamp in Mikrosekunden (gemäß der Spezifikation der Apache Iceberg-Tabelle).

timestamptz

TIMESTAMP_LTZ(6)

Genauigkeit im Mikrosekundenbereich gemäß der Spezifikation der Apache Iceberg-Tabelle.

Sie können auch den physischen Parquet-Typ int96 für Zeitstempel verwenden. Snowflake übersetzt timestamp in Mikrosekunden (gemäß der Spezifikation der Apache Iceberg-Tabelle).

string

VARCHAR(16777216)

uuid

BINARY(16)

Der Datentyp uuid wird nicht für Tabellen unterstützt, die Snowflake als Katalog verwenden, oder für konvertierte Tabellen.

Wenn Sie einen externen Katalog verwenden oder eine Tabelle aus Dateien im Objektspeicher erstellen, ordnet Snowflake den Iceberg-Typ uuid dem Snowflake-Typ BINARY(16) zu.

struct

Strukturierter OBJECT-Typ

Spalten vom strukturierten Typ unterstützen maximal 1.000 Unterspalten.

list

Strukturierter ARRAY-Typ

Spalten vom strukturierten Typ unterstützen maximal 1.000 Unterspalten.

map

MAP

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

Strukturierter OBJECT-Typ

ARRAY

Strukturierter ARRAY-Typ

MAP

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 oder double 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.