Apache Iceberg™-Tabelle konvertieren, um Snowflake als Katalog zu verwenden¶
Konvertieren Sie eine Apache Iceberg™ Tabelle, die nicht von Snowflake verwaltet wird, in eine Tabelle, die Snowflake als Iceberg-Katalog verwendet.
Sie können sich für die Konvertierung einer Tabelle entscheiden, wenn Sie die volle Unterstützung der Snowflake-Plattform wünschen, einschließlich der Unterstützung für Snowflake-Katalog SDK.
Erläuterungen zu den Unterschieden zwischen den Iceberg-Tabellentypen finden Sie unter Katalogoptionen.
Vor und nach der Tabellenkonvertierung¶
Wenn Sie eine Iceberg-Tabelle konvertieren, um Snowflake als Katalog zu verwenden, wird die Tabelle beschreibbar und Snowflake übernimmt die Lebenszyklusverwaltung für sie.
Die folgende Tabelle vergleicht Iceberg-Tabellen vor und nach der Konvertierung:
Vor der Konvertierung |
Nach der Konvertierung |
|
---|---|---|
Iceberg-Katalog |
Ein externer Katalog (wie AWS Glue) oder gar kein Katalog. Erfordert eine Katalogintegration. |
Snowflake. Snowflake registriert Änderungen an den Quelldaten und speichert die Änderungen im Snowflake-Katalog. Snowflake aktualisiert dann die Tabellen-Metadaten auf Ihrem externen Volume. Eine Katalogintegration ist nicht erforderlich. |
Snowflake-Leseoperationen |
✔ |
✔ |
Snowflake-Schreiboperationen |
❌ |
✔ |
Speicherort für Tabellendaten und Metadaten |
Externes Volume (externer Cloudspeicher). |
Externes Volume (externer Cloudspeicher) unter einem von Ihnen angegebenen Basis-Speicherort. |
Bereinigung von Daten und Metadaten |
Von Ihnen oder Ihrem externen Katalog verwaltet. |
Verwaltet von Snowflake. Snowflake löscht niemals Metadaten, Manifestlisten oder Manifeste, die vor der Konvertierung aus Ihrem externen Speicher erstellt wurden. Snowflake schreibt während der Konvertierung keine Parquet Dateien neu. Nachdem Sie eine Tabelle konvertiert haben, schreibt Snowflake möglicherweise einige der Datendateien im Rahmen der regulären Tabellenwartung neu. |
Zugriff über das Snowflake-Katalog-SDK |
❌ |
✔ |
Wichtig
Wenn Sie eine Iceberg-Tabelle konvertieren, nimmt Snowflake keine Sperrung des externen Speichers vor und geht auch nicht von einem alleinigen Zugriff aus. Um eine Beschädigung der Tabelle zu verhindern, stellen Sie sicher, dass Sie alle nicht von Snowflake initiierten Schreiboperationen (z. B. automatische Wartungsjobs) auf Ihrem externen Speicherort überwachen oder stoppen.
Anforderungen¶
Bevor Sie eine Iceberg-Tabelle konvertieren, stellen Sie sicher, dass Snowflake auf Ihr externes Volume schreiben kann.
Damit Snowflake auf Ihr externes Volume schreiben kann, müssen die folgenden Bedingungen erfüllt sein:
Verwenden Sie den Befehl ALTER ICEBERG TABLE … REFRESH, um die Tabelle manuell zu aktualisieren, bevor Sie sie konvertieren.
Die Eigenschaft
ALLOW_WRITES
für Ihr externes Volumen ist aufTRUE
eingestellt. Um den Wert dieser Eigenschaft für ein vorhandenes externes Volume zu aktualisieren, verwenden Sie den Befehl ALTER EXTERNAL VOLUME. Beispiel:ALTER EXTERNAL VOLUME my_ext_vol SET ALLOW_WRITES=TRUE
.Die Zugriffssteuerungsberechtigungen, die Sie für das Cloudspeicherkonto festlegen, müssen den Schreibzugriff erlauben. Wenn Sie zum Beispiel ein externes Volume verwenden, das für Amazon S3 konfiguriert ist, muss Ihre IAM-Rolle die Berechtigung
s3:PutObject
für Ihren S3-Speicherort haben.
Bemerkung
Das Konvertieren einer Tabelle, die eine nicht materialisierte Identitätspartitionsspalte enthält, wird nicht unterstützt. Eine nicht materialisierte Identitätspartitionsspalte wird erstellt, wenn eine Tabelle eine Identitätstransformation unter Verwendung einer Quellspalte definiert, die nicht in einer Parquet-Datei existiert.
Beispiel: Eine Tabelle konvertieren¶
Wichtig
Wenn Sie eine Iceberg-Tabelle konvertieren, nimmt Snowflake keine Sperrung des externen Speichers vor und geht auch nicht von einem alleinigen Zugriff aus. Um eine Beschädigung der Tabelle zu verhindern, stellen Sie sicher, dass Sie alle nicht von Snowflake initiierten Schreiboperationen (z. B. automatische Wartungsjobs) auf Ihrem externen Speicherort überwachen oder stoppen.
Dieses Beispiel beginnt mit dem Erstellen einer Iceberg-Tabelle aus Iceberg-Dateien im Objektspeicher. Snowflake verwendet den Wert von METADATA_FILE_PATH
, um die Tabellenmetadaten an folgendem Speicherort für Spaltendefinitionen zu suchen: <ext-vol-storage-base-url>/path/to/metadata/v1.metadata.json
.
CREATE ICEBERG TABLE myIcebergTable
EXTERNAL_VOLUME='icebergMetadataVolume'
CATALOG='icebergCatalogInt'
METADATA_FILE_PATH='path/to/metadata/v1.metadata.json';
Verwenden Sie dann den Befehl ALTER ICEBERG TABLE … REFRESH, um die Metadaten der Tabelle mit der neuesten Metadatendatei zu synchronisieren. Mit dem folgenden Beispielbefehl wird die Tabelle durch Angabe eines Pfads für die Metadatendatei aktualisiert.
ALTER ICEBERG TABLE myIcebergTable REFRESH 'metadata/v2.metadata.json';
Konvertieren Sie schließlich die Tabelle für die Verwendung von Snowflake als Iceberg-Katalog, indem Sie den Befehl ALTER ICEBERG TABLE … CONVERT TO MANAGED ausführen.
ALTER ICEBERG TABLE myIcebergTable CONVERT TO MANAGED
BASE_LOCATION = 'my/relative/path/from/external_volume';
Bemerkung
In diesem Beispiel muss die ALTER-Anweisung einen Wert für BASE_LOCATION
angeben, da die Tabelle aus Iceberg-Dateien im Objektspeicher erstellt wurde und BASE_LOCATION
nicht Teil der ursprünglichen CREATE ICEBERG TABLE-Anweisung war. BASE_LOCATION
definiert den relativen Pfad von Ihrem externen Volume zu einem Verzeichnis, in das Snowflake die Tabellendaten und Metadaten für die konvertierte Tabelle schreibt.
Wenn BASE_LOCATION
in der ursprünglichen CREATE ICEBERG TABLE-Anweisung angegeben wurde, müssen Sie diese Angabe nicht in Ihren ALTER ICEBERG TABLE … CONVERT TO MANAGED-Befehl aufnehmen.
Snowflake schreibt zum Beispiel Tabellendaten in <ext-vol-storage-base-url>/myBaseLocation/data/
.
Snowflake schreibt Metadaten für die konvertierte Tabelle in <ext-vol-storage-base-url>/myBaseLocation/metadata/
.
Konvertierung und Datentypen¶
Bemerkung
Sie können eine Tabelle, die die folgenden Iceberg-Datentypen verwendet, nicht konvertieren:
uuid
fixed(L)
Snowflake verwendet Snowflake-Datentypen zur Verarbeitung und Rückgabe von Werten, schreibt aber die ursprünglichen Iceberg-Typen in Tabellendatendateien.
Für Datentypen wie int
und long
unterstützt der Snowflake-Datentyp einen größeren Wertebereich als der Iceberg-Datentyp. Um die Konsistenz mit dem Quelldatentyp zu wahren, lässt Snowflake das Einfügen von Werten, die außerhalb des vom Quelldatentyp unterstützten Wertebereichs liegen, nicht zu. Weitere Informationen dazu finden Sie unter Ungefähre Typen.