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:
geographygeometrynanosecondvariant
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:
Snowflake-verwaltete Iceberg-Tabellen
Extern verwaltete Iceberg-Tabellen, die Sie in einer katalogverknüpften Datenbank erstellen.
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
3zu setzen. Weitere Informationen dazu finden Sie unter ICEBERG_VERSION_DEFAULT.Geben Sie
ICEBERG_VERSION = 3in 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;
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;
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;
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;
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');
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
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');
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 |
|---|---|
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:
|
LOAD_MODE =FULL_INGEST oder ADD_FILES COPY werden unter Berücksichtigung der folgenden Punkte unterstützt:
|
|
Wird mit den folgenden Einschränkungen unterstützt:
|
|
Datenschutzrichtlinien |
Die folgenden Datenschutzrichtlinien werden unterstützt:
|
Data Quality Monitoring |
|
Schreiben einer extern verwalteten Iceberg-Tabelle der Version 3 als Ziel einer dynamischen Tabelle. |
|
Abfragebeschleunigung |
|
Klassifizierung sensibler Daten |
|
Partitionierte Tabellen können nicht auch Löschvektoren schreiben. Für partitionierte Tabellen wird nur das Copy-on-Write-Verhalten unterstützt. |
|
Version 4.0 oder höher. |
|
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. |
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. |
|
|
|
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;
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;
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;
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}'));
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;
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');
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;
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;