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 auf TRUE 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';
Copy

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';
Copy

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';
Copy

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.