Apache Iceberg™-Tabellen: Unterstützung für Apache Iceberg™ v3 (Vorschau)

Mit dieser Vorschau wird die Unterstützung von v3 der Apache Iceberg™-Spezifikation eingeführt, es sind jedoch einige Hinweise und Einschränkungen zu beachten. Sofern nicht anders angegeben, werden in dieser Vorschau sowohl von Snowflake verwaltete als auch extern verwaltete Iceberg-Tabellen unterstützt.

Unterstützte Iceberg v3-Features

In diesem Abschnitt sind die Iceberg v3-Features aufgeführt, die in dieser Vorschau unterstützt werden.

Datentypen

Die folgenden v3-Datentypen werden in der öffentlichen Vorschau unterstützt:

  • geography

  • geometry

  • nanosecond

  • variant

Weitere Informationen dazu finden Sie unter Iceberg v3-Datentypen.

Standardwerte

Siehe Standardwerte.

Löschvektoren

Siehe Löschvektoren.

Zeilenherkunft

Siehe Zeilenherkunft.

Konfigurieren der Iceberg-Standardversion

Iceberg-Tabellen verfügen grundsätzlich über eine Formatversion, der sie entsprechen. Für extern verwaltete Iceberg-Tabellen in einer Snowflake-Standarddatenbank ruft Snowflake diese Version aus den Metadaten der Tabelle ab.

Bei den folgenden Iceberg-Tabellen muss der die Person mit Eigentumsrechten an der Tabelle angeben, welcher Iceberg-Version die Tabelle entsprechen soll:

Die Standardversion des Iceberg-Formats in Snowflake ist v2, aber Sie können diese bei Bedarf auf v3 einstellen. Um die Iceberg-Version auf v3 festzulegen, führen Sie eine der folgenden Aktionen aus:

  • Verwenden Sie den Parameter ICEBERG_VERSION_DEFAULT, um die Iceberg-Version auf Konto-, Datenbank- oder Schemaebene auf 3 zu setzen. Weitere Informationen dazu finden Sie unter ICEBERG_VERSION_DEFAULT.

  • Geben Sie ICEBERG_VERSION = 3 in Ihrer CREATE ICEBERG TABLE-Anweisung an.

    Bemerkung

    Wenn Sie beim Erstellen einer Iceberg-Tabelle keine Iceberg-Version angeben, wird die Tabelle standardmäßig auf die Iceberg-Version gesetzt, die für das Schema, die Datenbank oder das Konto festgelegt wurde. Das Schema hat Vorrang vor der Datenbank, und die Datenbank hat Vorrang vor dem Konto.

Vorsicht

Bevor Sie andere Engines verwenden, um die Formatversion einer Iceberg-Tabelle in den Tabelleneigenschaften auf Version 3 zu aktualisieren, stellen Sie sicher, dass die Tabelle nicht von Engines oder Anwendungen verwendet wird, die noch nicht Version 3 unterstützen. Das Herabstufen von Formatversionen wird in der Apache Iceberg-Spezifikation nicht unterstützt. Daher müssen alle Reader und Writer Version 3 unterstützen. Die Standardversion für Iceberg-Tabellen in Snowflake ist Version 2, die bei Bedarf auf Version 3 geändert werden kann. Die Verwendung von Snowflake zur Durchführung von In-Place-Versions-Upgrades wird derzeit nicht unterstützt.

Nutzungshinweise

  • Um den Parameter ICEBERG_VERSION_DEFAULT auf Kontoebene zu ändern, müssen Sie ein Kontoadmin sein; das heißt, Sie müssen ein Benutzender mit der ACCOUNTADMIN-Rolle sein.

  • Um den Parameter ICEBERG_VERSION_DEFAULT auf Datenbank- oder Schemaebene zu ändern, muss die Rolle, mit der der Vorgang ausgeführt wird, die OWNERSHIP-Berechtigung für die jeweilige Datenbank oder das Schema haben.

Beispiele

Geben Sie an, dass neue Iceberg-Tabellen in der Datenbank my_db mit v3 erstellt werden sollen:

ALTER DATABASE my_db SET ICEBERG_VERSION_DEFAULT=3;
Copy

Erstellen Sie eine neue, extern verwaltete Iceberg-Tabelle mit v3. Die im Befehl enthaltenen Spaltendefinitionen zeigen an, dass im Remote-Katalog eine neue Tabelle erstellt oder eine bestehende Tabelle ersetzt wird. Die Tabelle wird erfolgreich erstellt, da es sich um eine neue Tabelle handelt, für die noch keine Version vorhanden ist.

CREATE OR REPLACE ICEBERG TABLE my_iceberg_v3_table (
    boolean_col boolean,
    int_col int,
    long_col long,
  )
  CATALOG='my_catalog_integration'
  ICEBERG_VERSION=3;
Copy

Erstellen Sie eine extern verwaltete Iceberg-Tabelle mit v3 aus einer bestehenden Tabelle mit Iceberg-Metadaten. Das Fehlen einer Spaltendefinitionen oder einer Formatversion in diesem Beispiel zeigt an, dass diese Tabelle bereits existiert und die Spaltenspezifikation und die Formatversion aus den Iceberg-Metadaten aus dem Remote-Katalog abgeleitet werden. Dieses Beispiel verwendet vom Katalog bereitgestellte Anmeldeinformationen. Der Parameter EXTERNAL_VOLUME ist daher nicht in der CREATE ICEBERG TABLE-Anweisung enthalten:

CREATE OR REPLACE ICEBERG TABLE my_iceberg_v3_table
  CATALOG = 'my_catalog_integration'
  CATALOG_TABLE_NAME = 'my_table'
  AUTO_REFRESH = TRUE;
Copy

Bemerkung

Sie können nicht den Befehl ALTER ICEBERG TABLE verwenden, um die Formatversion für eine bestehende Tabelle zu ändern.

Abrufen der Formatversion für Iceberg-Tabellen

  • Das folgende Beispiel zeigt, wie Sie die Iceberg-Version für eine bestimmte Tabelle abrufen:

    SHOW PARAMETERS LIKE 'ICEBERG_VERSION' IN TABLE my_v3_iceberg_table;
    
    Copy

    Ausgabe:

    +-----------------+-------+---------+-------+---------------------------------------------------+--------+
    | key             | value | default | level | description                                       | type   |
    +-----------------+-------+---------+-------+---------------------------------------------------+--------+
    | ICEBERG_VERSION | 3     | 2       | TABLE | Specifies the Iceberg table format version to ... | NUMBER |
    +-----------------+-------+---------+-------+---------------------------------------------------+--------+
    
  • Das folgende Beispiel zeigt, wie Sie die Iceberg-Version für eine bestimmte Tabelle mithilfe GET_DDL-Funktion zum Abrufen der Definition der Iceberg-Tabelle abrufen:

    SELECT GET_DDL('ICEBERG_TABLE', 'my_v3_iceberg_table');
    
    Copy

    Ausgabe:

     CREATE ICEBERG TABLE my_v3_iceberg_table (
      record VARIANT,
      event_timestamp TIMESTAMP_LTZ(6)
    )
      CATALOG = 'SNOWFLAKE'
      EXTERNAL_VOLUME = 'my_external_volume'
      BASE_LOCATION = 'my_iceberg_table'
      ICEBERG_VERSION = 3;
    

Hinweise und Einschränkungen zu Iceberg v3-Features

Beachten Sie die folgenden Informationen, wenn Sie die Features von Iceberg v3 verwenden:

Nicht unterstützte Snowflake-Features

Die folgenden Snowflake-Features werden in dieser Vorschau für Iceberg v3 nicht unterstützt:

  • Nur-Anfügen-Streams für extern verwaltete Iceberg-Tabellen

  • dbt-Projekte in Snowflake

  • Schema-Inferenz

  • Snowpipe Streaming classic architecture

  • SnowGov-Regionen

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

  • Ein In-Place-Upgrade einer Snowflake-verwalteten Iceberg-Tabelle von v2 auf v3, das das Klonen einer v2-Tabelle und das anschließende Upgrade des Klons auf v3 umfasst.

    Wichtig

    Wenn Sie Apache Spark verwenden, um eine extern verwaltete Iceberg-Tabelle von v2 auf v3 zu aktualisieren, müssen Sie ein Commit verwenden, das einen neuen Snapshot erstellt, wie z. B. DML-Vorgänge. Wenn aber die Formatversion in den Tabelleneigenschaften ohne einen neuen Snapshot aktualisiert wird, schlägt die manuelle und automatische Aktualisierung von Snowflake für die Tabelle fehl, bis ein neuer Snapshot erstellt wird.

    Das folgende Beispiel verwendet Apache Spark, um eine extern verwaltete Iceberg-Tabelle von v2 auf v3 zu aktualisieren:

    ALTER TABLE table_name SET TBLPROPERTIES('format-version'='3');
    
    Copy

Bemerkung

  • Die Liste der nicht unterstützten Features ist noch nicht vollständig und kann sich in Zukunft ändern. Die Liste wird bei Bedarf aktualisiert, um die neuesten nicht unterstützten Features widerzuspiegeln.

  • Hinweise und Einschränkungen zu v3-spezifischen Features finden Sie im Feature-Thema für ein Feature.

Unterstützte Snowflake-Features

Features, die nicht im Abschnitt Nicht unterstützte Snowflake-Features aufgeführt sind, werden unterstützt. Zu den unterstützten Features gehören die in der folgenden Liste:

Feature

Anmerkungen

Automatische Ausführung für Freigabeangebote

Automatische Aktualisierung

Katalogintegrationen

Katalogverknüpfte Datenbanken

Klonen

Clustering

Nur Snowflake-verwaltete Iceberg-Tabellen der Version 3.

Konvertieren von extern verwalteten v3-Tabellen in von Snowflake verwaltete

Wird mit den folgenden Hinweisen unterstützt:

  • Die Iceberg-Partitionierung bleibt unverändert, wenn Sie eine Iceberg-Tabelle der Version 3 konvertieren.

  • Snowflake löscht niemals vor der Konvertierung Metadaten, Manifestlisten oder Manifeste aus Ihrem externen Speicher.

  • Während der Konvertierung schreibt Snowflake keine Metadaten oder Parquet-Datendateien neu.

  • Nach der Konvertierung ist Snowflake der Katalog, der vollständig für die Lebenszyklusverwaltung der Tabelle verantwortlich ist. Snowflake löscht Metadaten, Manifestlisten, Manifeste und Datendateien, die entweder vor oder nach der Konvertierung aus Ihrem externen Speicher erstellt wurden, nachdem sie abgelaufen sind und das Aufbewahrungsfenster überschritten haben.

COPY INTO <Tabelle>

LOAD_MODE =FULL_INGEST oder ADD_FILES COPY werden unter Berücksichtigung der folgenden Punkte unterstützt:

  • Zum Laden der Metadatenspalten der Zeilenherkunft für Parquet-Dateien (_row_id und _last_updated_sequence_number) müssen Sie die Option FULL_INGEST verwenden. Die anderen LOAD_MODE-Methoden werden nicht unterstützt. Parquet-Dateien, die die Zeilenherkunft enthalten, sind jedoch wahrscheinlich bereits Teil einer Iceberg v3-Tabelle. Das Registrieren von Parquet-Dateien mit ADD_FILES_COPY wird nicht empfohlen, wenn diese Dateien bereits Teil einer anderen Iceberg-Tabelle sind. Die beste Methode zum Konvertieren von extern verwalteten Iceberg-Tabellen in von Snowflake verwaltete Iceberg-Tabellen ohne Umschreiben von Dateien ist die Verwendung des Befehls ALTER ICEBERG TABLE … CONVERT TO MANAGED.

COPY INTO <Speicherort>

Wird mit den folgenden Einschränkungen unterstützt:

  • VARIANT, GEOMETRY und GEOGRAPHY werden als JSON-codierte Zeichenfolgen entladen.

  • TIMESTAMP_NTZ(9) wird als Millisekunden entladen, nicht als Nanosekunden.

  • TIMESTAMP_LTZ(9), ARRAY, OBJECT und MAP müssen in andere Datentypen umgewandelt werden.

Data Clean Rooms

Datenabfolge

Datenschutzrichtlinien

Die folgenden Datenschutzrichtlinien werden unterstützt:

  • Maskierungsrichtlinien

  • Zeilenzugriffsrichtlinien

  • Projektionsrichtlinien

  • Aggregationsrichtlinien

  • Datenschutzrichtlinien

  • Verknüpfungsrichtlinien

Durchsetzung von Datenschutzrichtlinien von Apache Spark

Data Quality Monitoring

Dynamische Tabellen

Schreiben einer extern verwalteten Iceberg-Tabelle der Version 3 als Ziel einer dynamischen Tabelle.

Horizon Iceberg REST Catalog API

LOB (Large Object, großes Objekt)

Materialisierte Ansichten

Objekt-Tagging

Abfragebeschleunigung

Replication

Suchoptimierung

Sichere Ansichten

Klassifizierung sensibler Daten

Zieldateigröße

Iceberg-Partitionierung mit einem Argument

Partitionierte Tabellen können nicht auch Löschvektoren schreiben. Für partitionierte Tabellen wird nur das Copy-on-Write-Verhalten unterstützt.

Snowflake-Konnektor für Kafka

Version 4.0 oder höher.

Snowpark

1.33.0 oder höher.

Snowpark pandas API-Methode`to_iceberg <https://docs.snowflake.com/en/developer-guide/snowpark/reference/python/1.45.0/modin/pandas_api/modin.pandas.to_iceberg>`_

Wird nur für Iceberg v3 unterstützt, wennICEBERG_VERSION_DEFAULT für das Konto, die Datenbank oder das Schema festgelegt ist. Wenn ICEBERG_VERSION = 3 auf Tabellenebene festgelegt ist, wird die Snowflake pandas API-Methode to_iceberg nicht unterstützt.

Snowpark Connect für Apache Spark

Das Schreiben von Datenframes in bestehende Iceberg v3-Tabellen durch Verwendung einer Anfüge- oder Überschreibmethode wird unterstützt. Das Erstellen einer neuen Iceberg v3-Tabelle wird nicht unterstützt.

Snowpipe

Snowpipe Streaming high-performance architecture

Freigabe

Streams

  • Nur-Anfügen-Streams und Standard-Streams werden für von Snowflake verwaltete Iceberg v3-Tabellen unterstützt.

  • Nur-Einfügen-Streams und Standard-Streams werden für extern verwaltete Iceberg v3-Tabellen unterstützt.

    • Damit Standard-Streams die korrekten Ergebnisse liefern, muss die externe Engine unter Berücksichtigung der Iceberg v3-Spezifikation in Iceberg v3-Tabellen schreiben. Insbesondere sollten neu eingefügte Zeilen über _row_id=NULL verfügen. Zeilen, die während Copy-on-Write kopiert werden, sollten die _row_id beibehalten.

    • MAX_DATA_EXTENSION_TIME_IN_DAYS funktioniert nicht bei extern verwalteten Iceberg v3-Tabellen.

  • Wenn DMLs über Transaktionen mit mehreren Anweisungen bestätigt werden, haben Nur-Anfügen-Streams auf Iceberg v3-Tabellen eine andere Semantik als Iceberg v2-Tabellen:

    • Wenn in Iceberg v2 bei Nur-Anfügen-Streams eine Zeile in einer Transaktion mit mehreren Anweisungen hinzugefügt und dann gelöscht wird, wird diese Zeile als Einfügung betrachtet.

    • In Iceberg v3 wird diese Zeile bei Nur-Anfügen-Streams nicht als Einfügung behandelt.

Tabellenoptimierung

Nicht unterstützte Iceberg v3-Features

Die folgenden Features aus der Iceberg v3-Spezifikation werden nicht unterstützt:

  • Verschachtelte Variante

  • Transformationen mit mehreren Argumenten für Partitionierung und Sortierung

  • Tabellenverschlüsselungsschlüssel

  • Datentyp UNKNOWN

Beispiele: Unterstützung von v3 mit vorhandenen Snowflake-Features

In diesem Abschnitt sind Beispiele für die vorhandenen Snowflake-Features aufgeführt, die mit v3 unterstützt werden. Ein Feature-Freigabeangebot enthält ein Beispiel für eine von Snowflake verwaltete Tabelle und eine extern verwaltete Tabelle, sofern unterstützt.

Eine vollständige Liste der Snowflake-Features, die in dieser Vorschau für Iceberg v3 unterstützt werden, finden Sie unter Unterstützte Snowflake-Features.

Erstellen einer v3 Iceberg-Tabelle

Im folgenden Beispiel wird eine von Snowflake verwaltete Apache Iceberg™-Tabelle erstellt, die v3 der Apache Iceberg™-Spezifikation entspricht:

CREATE ICEBERG TABLE my_v3_iceberg_table (
  record VARIANT,
  event_timestamp TIMESTAMP_LTZ(6)
)
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_external_volume'
  BASE_LOCATION = 'my_iceberg_table'
  ICEBERG_VERSION = 3;
Copy

Im folgenden Beispiel wird eine Apache Iceberg™-Tabelle erstellt, die einen externen Iceberg REST-Katalog verwendet und v3 der Apache Iceberg™-Spezifikation entspricht:

Bemerkung

Sie müssen nicht ICEBERG_VERSION = 3 mit dem Befehl angeben, da die Formatversion bereits in den Metadaten des externen Katalogs definiert ist, sodass Snowflake diese Version aus den Metadaten abruft.

CREATE ICEBERG TABLE my_v3_iceberg_table
  EXTERNAL_VOLUME = 'my_external_volume'
  CATALOG = 'my_rest_catalog_integration'
  CATALOG_TABLE_NAME = 'my_remote_table'
  AUTO_REFRESH = TRUE;
Copy

Im folgenden Beispiel wird eine schreibfähige Iceberg-Tabelle in einer katalogverknüpften Datenbank mit Spaltendefinitionen erstellt, die v3 der Apache Iceberg™-Spezifikation entspricht:

USE DATABASE my_catalog_linked_db;

USE SCHEMA 'my_namespace';

CREATE OR REPLACE ICEBERG TABLE my_iceberg_table (
  first_name string,
  last_name string,
  amount int,
  create_date date
)
  ICEBERG_VERSION = 3;
Copy

Schreiben in eine Iceberg v3-Tabelle

Die DML-Befehle INSERT, UPDATE, DELETE, MERGE, TRUNCATE TABLE und COPY INTO werden für das Schreiben in von Snowflake verwaltete und extern verwaltete Iceberg v3-Tabellen unterstützt:

Im folgenden Beispiel wird eine Zeile in eine Apache Iceberg™-Tabelle eingefügt, die v3 der Apache Iceberg™-Tabellenspezifikation entspricht:

INSERT INTO my_v3_iceberg_table (id, payload) VALUES (1, PARSE_JSON('{"name": "Alice", "age": 30}'));
Copy

Im folgenden Beispiel werden Dateien in eine Apache Iceberg™-Tabelle geladen, die v3 der Apache Iceberg™-Tabellenspezifikation entspricht:

COPY INTO my_v3_iceberg_table
  FROM @my_json_stage
  FILE_FORMAT = 'my_json_format'
  MATCH_BY_COLUMN_NAME = CASE_SENSITIVE;
Copy

Laden von Daten mit Snowpipe

Im folgenden Beispiel werden Daten aus Dateien für Iceberg v3-Tabellen geladen, sowohl für von Snowflake verwaltete als auch für extern verwaltete Tabellen:

CREATE PIPE mypipe
  AUTO_INGEST = TRUE
  INTEGRATION = 'MYINT'
  AS
  COPY INTO snowpipe_db.public.my_v3_iceberg_table
  FROM @snowpipe_db.public.mystage
  FILE_FORMAT = (TYPE = 'JSON');
Copy

Bemerkung

Snowflake unterstützt zusätzliche Schreib-Features für Iceberg v3. Diese Liste finden Sie unter Hinweise und Einschränkungen für Iceberg v3-Features. Sehen Sie sich auch die Liste der unterstützten Snowflake-Features an.

Erstellen einer dynamischen Iceberg v3-Tabelle

Das folgende Beispiel schreibt eine von Snowflake verwaltete Iceberg v3-Tabelle als Ausgabe einer dynamischen Tabelle:

CREATE DYNAMIC ICEBERG TABLE my_dynamic_iceberg_v3_table (
    num_orders NUMBER(10,0),
    order_day
  )
  TARGET_LAG = '20 minutes'
  WAREHOUSE = my_warehouse
  EXTERNAL_VOLUME = 'my_external_volume'
  CATALOG = 'SNOWFLAKE'
  BASE_LOCATION = 'my_dynamic_iceberg_v3_table'
  ICEBERG_VERSION = 3
  AS
    SELECT
        COUNT(DISTINCT order_id)
        DATE_TRUNC('DAY', order_timestamp_ns) AS order_day
      FROM staging_v3_iceberg_table;
Copy

Bemerkung

Das Schreiben einer extern verwalteten Iceberg-Tabelle der Version 2 oder Version 3 als Ziel einer dynamischen Tabelle wird nicht unterstützt. Die Ausgabe einer dynamischen Iceberg-Tabelle kann nur von Snowflake verwaltet werden.

Abfrage einer Iceberg v3-Tabelle

Im folgenden Beispiel wird eine von Snowflake verwaltete oder extern verwaltete Iceberg v3-Tabelle abgefragt:

SELECT * FROM MY_DB.MY_SCHEMA.MY_ICEBERG_V3_TABLE;
Copy