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

Bemerkung

Für nicht-numerische Datentypen geben Sie den Snowflake-Datentyp in Ihrer Tabellen-DDL an, wenn Sie Snowflake als Katalog verwenden (verwenden Sie z. B. ein strukturiertes ARRAY anstelle des Typs list). Snowflake ordnet jeden Snowflake-Typ automatisch dem entsprechenden Iceberg-Datentyp in den Metadaten der Tabelle zu, um die Interoperabilität mit externen Iceberg-Tools zu gewährleisten.

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)

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(134217728)

Die Standardgröße ist 128 MB, und die einzige Größe, die Sie explizit angeben können, ist 134217728 (128 MB).

uuid

UUID

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.

Iceberg v3-Datentypen

Wichtig

Um Iceberg v3-Datentypen zu verwenden, müssen Sie die Version der Apache Iceberg™-Spezifikation, mit der Ihre Iceberg-Tabelle übereinstimmt, als 3 angeben. Weitere Informationen zum Angeben einer Version finden Sie unter Konfigurieren der Iceberg-Standardversion.

Die folgende Tabelle zeigt die Apache Iceberg™ v3-Datentypen, die Sie mit Iceberg-Tabellen verwenden können:

Iceberg-Datentyp

Snowflake-Datentyp

Anmerkungen

geography

GEOGRAPHY

Snowflake unterstützt die Datentyp GEOGRAPHY in Apache Iceberg™-Tabellen. Sie können eine von Snowflake verwaltete oder extern verwaltete Iceberg-Tabelle mit einer GEOGRAPHY-Spalte erstellen. Um eine Iceberg-Tabelle mit einer GEOGRAPHY-Spalte zu erstellen, verwenden Sie den Befehl CREATE ICEBERG TABLE.

Vorsicht

Iceberg verwendet das WKB-Format zum Speichern von geografischen Daten. Dieses Format kann nicht alle Daten darstellen, die in Snowflake GEOGRAPHY-Werten enthalten sein können. Die Feature- und:code:FeatureCollection-Typen werden im WKB-Format nicht unterstützt. Beim Einfügen von GEOGRAPHY-Werten mit diesen Typen in eine Iceberg-Tabelle konvertiert Snowflake die Features in die zugrunde liegenden Geography-Objekte und löscht alle Eigenschaften. Die automatische Konvertierung für Iceberg-Tabellen verhält sich identisch zur Funktion ST_ASWKB.

Für GEOGRAPHY-Objekte ist dieSRID immer 4326.

geometry

GEOMETRY

Snowflake unterstützt die Datentyp GEOMETRY in Apache Iceberg™-Tabellen. Sie können eine von Snowflake verwaltete oder extern verwaltete Iceberg-Tabelle mit einer GEOMETRY-Spalte erstellen. Um eine Iceberg-Tabelle mit einer GEOMETRY-Spalte zu erstellen, verwenden Sie den Befehl CREATE ICEBERG TABLE.

Bemerkung

Alle GEOMETRY-Objekte in einer einzelnen Spalte müssen die gleiche SRID haben.

timestamp_ns

TIMESTAMP_NTZ(9)

Genauigkeit im Nanosekundenbereich gemäß der Spezifikation der Apache Iceberg-Tabelle. Keine Zeitzonensemantik („Wall-Clock“-Zeit). TIMESTAMP(9) wird zuerst entweder dem Snowflake-Typ TIMESTAMP_NTZ (9) oderTIMESTAMP_LTZ (9) zugeordnet, abhängig vom Wert des Snowflake-Parameters TIMESTAMP_TYPE_MAPPING. Dann wird er dem entsprechenden Iceberg-Datentyp zugeordnet.

timestamptz_ns

TIMESTAMP_LTZ(9)

Genauigkeit im Nanosekundenbereich gemäß der Spezifikation der Apache Iceberg-Tabelle. In UTC gespeichert.

TIMESTAMP(9) wird zuerst entweder dem Snowflake-Typ TIMESTAMP_NTZ (9) oderTIMESTAMP_LTZ (9) zugeordnet, abhängig vom Wert des Snowflake-Parameters TIMESTAMP_TYPE_MAPPING. Dann wird er dem entsprechenden Iceberg-Datentyp zugeordnet.

variant

VARIANT

Snowflake hat den VARIANT-Datentyp ursprünglich für Snowflake-Standardtabellen entwickelt.

VARIANT bietet eine effiziente Binärcodierung für dynamische semistrukturierte Daten wie JSON, Avro, Protobuf, was die Arbeit mit Daten vereinfacht, die andere verschachtelte Datentypen enthalten. Weitere Informationen dazu finden Sie unter Semistrukturierte Datentypen und Introduction to loading semi-structured data.

Zerlegung

Snowflake bietet eine integrierte Zerlegung (auch Unterspaltenbildung ) für den VARIANT-Datentyp. Beim Zerlegen werden Felder aus einer Spalte vom Typ VARIANT in separate Felder extrahiert und in spaltenbasierter Form (Unterspalten) gespeichert, die Sie mit spezieller Notation durchlaufen und abfragen können.

Snowflake verfolgt Metadaten und Statistiken für zerlegte Unterspalten, was ein Abtrennen für schnellere und effizientere Abfragen ermöglicht.

Wenn Sie semistrukturierte Daten in eine VARIANT-Spalte einfügen, trennt Snowflake so viele der Daten wie möglich ab.

Weitere Informationen dazu finden Sie unter Semistrukturierte Datendateien und Subkolumnarisierung.

Hinweise zu den Iceberg v3-Datentypen

Beachten Sie bei der Verwendung der Iceberg v3-Datentypen Folgendes:

Zeitstempel im Nanosekundenbereich

  • Nutzungshinweise für den nanosecond timestamps-Datentyp:

    • Verwenden Sie TIMESTAMP_NTZ (9),TIMESTAMP_LTZ (9) oderTIMESTAMP (9) in CREATE ICEBERG TABLE- und:doc:/sql-reference/sql/alter-iceberg-table-Anweisungen. Eine Dezimalstellenzahl von``9`` gibt einen neuen Iceberg-Nansekundentyp an. Eine Dezimalstellenzahl von 6 gibt weiterhin den alten Mikrosekundentyp an.

    • Wenn eine Dezimalstellenzahl weggelassen wird, steuert der Parameter ICEBERG_TIMESTAMP_DEFAULT_SCALE auf Sitzungsebene die Genauigkeit. Die Standardeinstellung bleibt aus Gründen der Kompatibilität bei 6. Wenn Sie möchten, dass die Iceberg-Zeitstempelspalten standardmäßig auf Nanosekunden eingestellt sind, setzen Sie den Parameter auf 9.

    • Alle Standardtransformationen von Iceberg-Partitionen (z. B. Identität, Bucket, Jahr, Monat, Tag und Stunde) akzeptieren die neuen Nanosekundentypen genau so wie die Mikrosekundenvarianten.

    • Kompatibilität

      • Lesen/Schreiben: Lese- und Schreibvorgänge werden sowohl für von Snowflake verwaltete als auch für extern verwaltete Iceberg-Tabellen unterstützt.

      • Externe Tools: Es sind keine Konnektoränderungen erforderlich. Nanosekundenwerte werden bei Lese- und Schreibvorgängen als Iceberg-Standardwerte für timestamp_ns und:code:timestamptz_ns verwendet.

VARIANT

  • Beachten Sie die folgenden Hinweise und Einschränkungen, wenn Sie den VARIANT-Datentyp mit Iceberg-Tabellen verwenden:

    • Die normalen Überlegungen für Iceberg-Datentypen gelten für den VARIANT-Datentyp. Weitere Informationen dazu finden Sie unter Hinweise zur Arbeit mit Datentypen für Iceberg-Tabellen.

    • Die Schlüssel für Objekte in VARIANT-Spalten sollten vom Typ STRING sein.

    • Das Verwenden von Snowpipe oder COPYINTO zum Laden von Daten in Iceberg-Tabellen mit Variant-Spalten wird unterstützt. Snowpipe und COPYINTO kann jedoch nicht zum Laden von Daten in OBJECT-, ARRAY- oder MAP-Spalten verwendet werden, die eine verschachtelte Variant-Spalte enthalten.

    • Verschachtelte Varianten werden nicht unterstützt.

    • Siehe auch Hinweise zu in VARIANT gespeicherten semistrukturierten Daten.

Beispiele

Der folgende Abschnitt enthält Beispiele für die Iceberg v3-Datentypen.

GEOGRAPHY

Geben Sie zum Einfügen von Daten in eine GEOGRAPHY-Spalte die Eingabedaten an. Im folgenden Beispiel wird ein Geodatenobjekt, das als bekannter Text (WKT, Well-Known Text) definiert ist, in die geog-Spalte der geog_points-Tabelle eingefügt, die im vorherigen Beispiel erstellt wurde:

INSERT INTO geog_points
  SELECT TO_GEOGRAPHY('POINT(-122.3861109 37.61637595)');
Copy

Sie können auch Geodaten einfügen, ohne explizit den GEOGRAPHY-Wert zu erstellen:

INSERT INTO geog_points
  SELECT 'POINT(-122.3861109 37.61637595)';
Copy
GEOMETRY

Im folgenden Beispiel wird eine leere Iceberg-Tabelle erstellt, die eine einzelne GEOMETRY-Spalte mit dem Namen``geom`` mit der Standard-SRID 4326 enthält.

CREATE ICEBERG TABLE geo_points (geom GEOMETRY)
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_external_volume'
  BASE_LOCATION = 'us_states'
  ICEBERG_VERSION = 3;
Copy

Sie können die SRID auch explizit in der DDL-Anweisung angeben. Im folgenden Beispiel wird die SRID auf 4269 festgelegt:

CREATE ICEBERG TABLE geo_points (geom GEOMETRY(4269))
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_external_volume'
  BASE_LOCATION = 'us_states'
  ICEBERG_VERSION = 3;
Copy

Geben Sie zum Einfügen von Daten in eine GEOMETRY-Spalte die Eingabedaten an. Im folgenden Beispiel wird ein Geodatenobjekt, das als bekannter Text (WKT, Well-Known Text) definiert ist, in die geom-Spalte der geo_points-Tabelle eingefügt, die im vorherigen Beispiel erstellt wurde:

INSERT INTO geo_points
  SELECT TO_GEOMETRY('POINT(-122.3861109 37.61637595)');
Copy

Sie können auch Geodaten einfügen, ohne explizit den GEOMETRY-Wert zu erstellen:

INSERT INTO geo_points
  SELECT 'POINT(-122.3861109 37.61637595)';
Copy

Wenn die SRID nicht als Teil des GEOMETRY-Objekts verfügbar ist, können Sie sie explizit mit der Konstruktor-Funktion festlegen:

INSERT INTO geo_points
  SELECT TO_GEOMETRY('POINT(-122.3861109 37.61637595)', 4326);
Copy
Zeitstempel im Nanosekundenbereich

Das folgende Beispiel erstellt eine verwaltete Iceberg-Tabelle mit Zeitstempeln im Nanosekundenbereich:

CREATE ICEBERG TABLE sensor_readings (
    reading_ntz TIMESTAMP_NTZ(9),
    reading_ltz TIMESTAMP_LTZ(9))
  ICEBERG_VERSION = 3;
Copy

Für diese Anweisung führt Snowflake die folgenden Datentyp-Zuordnungen durch:

  • Der Datentyp der reading_ntz-Spalte wird dem Iceberg v3-Datentyp timestamp_ns zugeordnet.

  • Der Datentyp der reading_ltz-Spalte wird dem Iceberg v3-Datentyp timestamptz_ns zugeordnet.

VARIANT

Sie können eine Iceberg-Tabelle mit einer VARIANT-Spalte mithilfe des Befehls CREATE ICEBERG TABLE erstellen.

Im folgenden Beispiel wird eine leere, von Snowflake verwaltete Iceberg-Tabelle erstellt, die eine einzelne VARIANT-Spalte mit dem Namen record enthält.

CREATE ICEBERG TABLE car_sales (record VARIANT)
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_external_volume'
  BASE_LOCATION = 'car_sales'
  ICEBERG_VERSION = 3;
Copy

In ähnlicher Weise erstellt das folgende Beispiel eine leere, extern verwaltete Iceberg-Tabelle in einer mit dem Katalog verknüpften Datenbank, in die Snowflake schreiben kann.

USE DATABASE my_catalog_linked_db;

USE SCHEMA my_namespace;

CREATE ICEBERG TABLE car_sales (record VARIANT)
ICEBERG_VERSION = 3;
Copy

Zum Einfügen von Daten in eineVARIANT-Spalte geben Sie das Format der Eingabedaten an. Im folgenden Beispiel wird die PARSE_JSON-Funktion verwendet, um JSON-formatierte Daten in die record-Spalte der (zuvor erstellten) car_sales-Tabelle einzufügen.

INSERT INTO car_sales SELECT
  PARSE_JSON(
    '{
        "date" : "2017-04-28",
        "dealership" : "Valley View Auto Sales",
        "salesperson" : {
          "id": "55",
          "name": "John Salesperson"
        },
        "customer" : [
          {"name": "Alice Doe", "phone": "14151234567", "address": "San Francisco, CA"},
          {"name": "Bob Doe", "phone": "14151234567", "address": "San Francisco, CA"}
        ],
        "vehicle" : [
          {"make": "Honda", "model": "Civic", "year": "2017", "price": "20275", "extras":["ext warranty", "paint protection"]}
        ]
      }'
    );
Copy

Das Ausführen einer SELECT * FROM-Anweisung für die Tabelle gibt die folgende Ausgabe zurück:

+--------------------------------------------+
| RECORD                                     |
|--------------------------------------------|
| {                                          |
|    "customer": [                           |
|      {                                     |
|        "address": "San Francisco, CA",     |
|        "name": "Alice Doe",                |
|        "phone": "14151234567"              |
|      },                                    |
|      {                                     |
|        "address": "San Francisco, CA",     |
|        "name": "Bob Doe",                  |
|        "phone": "14151234567"              |
|      }                                     |
|    ],                                      |
|    "date": "2017-04-28",                   |
|    "dealership": "Valley View Auto Sales", |
|    "salesperson": {                        |
|      "id": "55",                           |
|      "name": "John Salesperson"            |
|    },                                      |
|    "vehicle": [                            |
|      {                                     |
|        "extras": [                         |
|          "ext warranty",                   |
|          "paint protection"                |
|        ],                                  |
|        "make": "Honda",                    |
|        "model": "Civic",                   |
|        "price": "20275",                   |
|        "year": "2017"                      |
|      }                                     |
|    ]                                       |
|  }                                         |
+--------------------------------------------+

Zum Abfragen der Daten in einer VARIANT-Spalte können Sie die Punkt- oder Klammernotation verwenden, um auf Elemente zuzugreifen, die in den Daten verschachtelt sind.

Im folgenden Beispiel wird die Punktnotation verwendet, um die Namen aller Verkaufenden zu erhalten, die Autos verkauft haben. Da es nur eine Zeile in der Tabelle gibt, erzeugt die Abfrage einen einzigen Ergebniswert.

SELECT record:salesperson.name
  FROM car_sales
  ORDER BY 1;
Copy

Ausgabe:

+-------------------------+
| RECORD:SALESPERSON.NAME |
|-------------------------|
| "John Salesperson"      |
+-------------------------+
Copy

Weitere Informationen zum Abfragen von semistrukturierten Daten finden Sie unter Abfragen von semistrukturierten Daten.

Bemerkung

  • Wenn Sie Apache Spark verwenden, um Iceberg-Tabellen mit Variant-Spalten zu lesen oder zu schreiben, müssen Sie die Version Apache Spark 4.0 oder höher verwenden, die Variant-Unterstützung bietet.

    Variant-Spalten in von Snowflake verwalteten Iceberg-Tabellen können von Engines gelesen werden, die Iceberg Variant unterstützen, wie z. B. Apache Spark. Engines können von Snowflake verwaltete Iceberg v3-Tabellen über die Horizon IcebergREST Catalog API lesen.

    spark.sql("""
    SELECT
    variant_get(record, '$.customer[0].name', 'string') AS customer_1_name
    variant_get(record, '$.salesperson.name', 'string') AS name
    FROM CAR_SALES
    ORDER BY name
    """).show()
    
    Copy

    In ähnlicher Weise kann Snowflake extern verwaltete Iceberg-Tabellen, die Variant-Spalten enthalten, lesen oder schreiben.

  • Snowflake kann bei Bedarf Nullwerte in eine Tabelle schreiben.

    Beispiel:

    INSERT INTO my_table_new
      SELECT ARRAY_CONSTRUCT(
          OBJECT_CONSTRUCT_KEEP_NULL('field1', NULL, 'field2', 123)
      )::ARRAY(OBJECT(field1 STRING, field2 INT));
    
    Copy

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

Hinweis

BINARY

BINARY

BOOLEAN

BOOLEAN

BYTE

NUMBER(3,0)

DATE

DATE

DECIMAL(P,S)

NUMBER(P,S)

DOUBLE

REAL

FLOAT

REAL

INTEGER

NUMBER(10,0)

LONG

NUMBER(20,0)

SHORT

NUMBER(5,0)

STRING

TEXT

TIMESTAMP

TIMESTAMP_LTZ(6)

Sie können auch den physischen Parquet-Typ int96 für TIMESTAMP verwenden, aber Snowflake unterstützt int96 nicht für TIMESTAMP_NTZ.

TIMESTAMP_NTZ

TIMESTAMP_NTZ(6)

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 Tabellen, die einen externen Katalog verwenden, können Sie keine Iceberg v3-Tabellen mit strukturierten Spalten erstellen, die OBJECT, ARRAY oder MAP enthalten. Sie können zum Beispiel nicht CREATE ICEBERG TABLE … AS SELECT (CTAS) verwenden, um eine extern verwaltete Iceberg v3-Tabelle mit strukturierten Spalten zu erstellen.

    Sie können von Snowflake verwaltete Iceberg v3-Tabellen mit strukturierte Spalten erstellen.

  • 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).

    • Bei Parquet-Dateien, die den logischen Typ LIST verwenden, sollten Sie Folgendes beachten:

      • Die dreistufige Anmerkungsstruktur mit dem Schlüsselwort element wird unterstützt. Weitere Informationen dazu finden Sie unter Definitionen für logische Parquet-Typen. Wenn Ihre Parquet-Datei ein veraltetes Format mit dem Schlüsselwort array verwendet, müssen Sie Ihre Daten auf der Grundlage des unterstützten Formats neu generieren.

  • Bei Tabellen, die aus Delta-Dateien erstellt wurden, sollten Sie Folgendes beachten:

    • 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.

    • Sie können den physischen Parquet-Typ int96 für TIMESTAMP verwenden, aber Snowflake unterstützt int96 nicht für TIMESTAMP_NTZ.