Laden von Daten in Apache Iceberg™-Tabellen¶
Snowflake unterstützt die folgenden Optionen zum Laden von Daten in eine von Snowflake verwaltete Iceberg-Tabelle:
Verwendung von Snowpipe Streaming mit Apache Iceberg™-Tabellen
Verwendung des Snowflake Connector für Kafka mit Apache Iceberg™-Tabellen
Dateiformate¶
Sie können Daten in eine Iceberg-Tabelle aus Dateien in jedem der Formate laden, die für das Laden in Standard-Snowflake-Tabellen unterstützt werden.
Für CSV, JSON, Avro und ORC konvertiert Snowflake die Daten aus Nicht-Parquet-Dateiformaten in Iceberg-Parquet-Dateien und speichert die Daten am Basisspeicherort der Iceberg-Tabelle. Für diese Dateiformat-Ladeszenarien, die eine Typkonvertierung erfordern, wird nur die Standardoption LOAD_MODE = FULL_INGEST
unterstützt.
Bei Apache Parquet-Dateien lädt Snowflake die Daten direkt in die Tabellenspalten und lässt Ihnen die Wahl zwischen den folgenden LOAD_MODE
Optionen:
FULL_INGEST
: Durchsucht die Dateien und schreibt die Parquet-Daten am Basisspeicherort der Iceberg-Tabelle neu.ADD_FILES_COPY
: Kopiert die Iceberg-kompatiblen Apache Parquet-Dateien, die nicht in einem Iceberg-Katalog registriert sind, binär in den Basisspeicherort der Iceberg-Tabelle und registriert die Dateien dann in der Iceberg-Tabelle.
Weitere Informationen dazu finden Sie unter COPY INTO <Tabelle>.
Beispiel: Iceberg-kompatible Parquet-Dateien laden¶
In diesem Beispiel erfahren Sie, wie Sie eine Iceberg-Tabelle erstellen und dann Daten aus Iceberg-kompatiblen Parquet-Datendateien im Stagingbereich in die Tabelle laden.
Zu Demonstrationszwecken verwendet dieses Beispiel die folgenden Ressourcen:
Ein externes Volume mit dem Namen
iceberg_ingest_vol
. Um ein externes Volume zu erstellen, siehe Externes Volume konfigurieren.Ein externer Stagingbereich namens
my_parquet_stage
, der mit Iceberg kompatible Parquet-Dateien enthält. Um einen externen Stagingbereich zu erstellen, siehe CREATE STAGE.
Erstellen Sie ein Dateiformatobjekt, das die im Stagingbereich bereitgestellten Parquet-Dateien beschreibt, unter Verwendung der erforderlichen Konfiguration für das Kopieren Iceberg-kompatibler Parquet-Daten (
TYPE = PARQUET USE_VECTORIZED_SCANNER = TRUE
):CREATE OR REPLACE FILE FORMAT my_parquet_format TYPE = PARQUET USE_VECTORIZED_SCANNER = TRUE;
Erstellen Sie eine von Snowflake verwaltete Iceberg-Tabelle und definieren Sie Spalten mit Datentypen, die mit den Datentypen der Quell-Parquet-Datei kompatibel sind:
CREATE OR REPLACE ICEBERG TABLE customer_iceberg_ingest ( c_custkey INTEGER, c_name STRING, c_address STRING, c_nationkey INTEGER, c_phone STRING, c_acctbal INTEGER, c_mktsegment STRING, c_comment STRING ) CATALOG = 'SNOWFLAKE' EXTERNAL_VOLUME = 'iceberg_ingest_vol' BASE_LOCATION = 'customer_iceberg_ingest/';
Bemerkung
Die Beispielanweisung gibt Iceberg-Datentypen an, die den Snowflake-Datentypen zugeordnet sind. Weitere Informationen dazu finden Sie unter Datentypen für Apache Iceberg™-Tabellen.
Verwenden Sie eine COPY INTO-Anweisung, um die Daten aus den im Stagingbereich bereitgestellten Parquet-Dateien (die sich direkt unter der Stagingbereich-URL befinden) in die Iceberg-Tabelle zu laden:
COPY INTO customer_iceberg_ingest FROM @my_parquet_stage FILE_FORMAT = 'my_parquet_format' LOAD_MODE = ADD_FILES_COPY PURGE = TRUE MATCH_BY_COLUMN_NAME = CASE_SENSITIVE;
Bemerkung
Das Beispiel gibt
LOAD_MODE = ADD_FILES_COPY
an, wodurch Snowflake angewiesen wird, die Dateien in den Speicherort Ihres externen Volumes zu kopieren und sie dann in der Tabelle zu registrieren.Diese Option vermeidet Gebühren für Dateien, da Snowflake die Quell-Parquet-Dateien nicht scannt und die Daten in neue Parquet-Dateien umschreibt.
Ausgabe:
+---------------------------------------------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+ | file | status | rows_parsed | rows_loaded | error_limit | errors_seen | first_error | first_error_line | first_error_character | first_error_column_name | |---------------------------------------------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------| | my_parquet_stage/snow_af9mR2HShTY_AABspxOVwhc_0_1_008.parquet | LOADED | 15000 | 15000 | 0 | 0 | NULL | NULL | NULL | NULL | | my_parquet_stage/snow_af9mR2HShTY_AABspxOVwhc_0_1_006.parquet | LOADED | 15000 | 15000 | 0 | 0 | NULL | NULL | NULL | NULL | | my_parquet_stage/snow_af9mR2HShTY_AABspxOVwhc_0_1_005.parquet | LOADED | 15000 | 15000 | 0 | 0 | NULL | NULL | NULL | NULL | | my_parquet_stage/snow_af9mR2HShTY_AABspxOVwhc_0_1_002.parquet | LOADED | 5 | 5 | 0 | 0 | NULL | NULL | NULL | NULL | | my_parquet_stage/snow_af9mR2HShTY_AABspxOVwhc_0_1_010.parquet | LOADED | 15000 | 15000 | 0 | 0 | NULL | NULL | NULL | NULL | +---------------------------------------------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
Fragen Sie die Tabelle ab:
SELECT c_custkey, c_name, c_mktsegment FROM customer_iceberg_ingest LIMIT 10;
Ausgabe:
+-----------+--------------------+--------------+ | C_CUSTKEY | C_NAME | C_MKTSEGMENT | |-----------+--------------------+--------------| | 75001 | Customer#000075001 | FURNITURE | | 75002 | Customer#000075002 | FURNITURE | | 75003 | Customer#000075003 | MACHINERY | | 75004 | Customer#000075004 | AUTOMOBILE | | 75005 | Customer#000075005 | FURNITURE | | 1 | Customer#000000001 | BUILDING | | 2 | Customer#000000002 | AUTOMOBILE | | 3 | Customer#000000003 | AUTOMOBILE | | 4 | Customer#000000004 | MACHINERY | | 5 | Customer#000000005 | HOUSEHOLD | +-----------+--------------------+--------------+