Iceberg-Tabelle konvertieren

Unter diesem Thema finden Sie Informationen zum Konvertieren einer 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 Iceberg Catalog SDK.

Erläuterungen zu den Unterschieden zwischen den Iceberg-Tabellentypen finden Sie unter Optionen für den Iceberg-Katalog.

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.

Snowflake greift nicht auf extern generierte Daten- und Metadatendateien zu.

Erreichbar über das Snowflake Iceberg Catalog 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 und/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.

Beispiel: Iceberg-Tabelle konvertieren

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 dann die Tabelle für die Verwendung von Snowflake als Iceberg-Katalog, indem Sie einen ALTER ICEBERG TABLE … CONVERT TO MANAGED-Befehl ausführen.

ALTER ICEBERG TABLE myIcebergTable CONVERT TO MANAGED
  BASE_LOCATION = myBaseLocation;
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

Wenn Sie eine Tabelle mit einem Iceberg-Datentyp konvertieren, den Snowflake nicht unterstützt, verwendet Snowflake einen Snowflake-Datentyp bei der Verarbeitung und bei der Rückgabe der Werte. Snowflake schreibt jedoch den ursprünglichen Iceberg-Datentyp in die Tabellendateien, sodass Sie die Tabelle mit anderen Computemodulen wie Apache Spark verwenden können.

Bei Datentypen wie int und long unterstützt der Datentyp, den Snowflake zur Verarbeitung verwendet, einen größeren Wertebereich als der Quelldatentyp. 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.

Betrachten Sie beispielsweise eine Tabelle mit einer Spalte vom Iceberg-Typ int. Nach der Konvertierung verarbeitet Snowflake die Spaltenwerte mit dem Snowflake-Datentyp NUMBER(10,0). NUMBER(10,0) hat einen Bereich von (-9.999.999.999, +9.999.999.999), aber int hat einen engeren Bereich von (-2.147.483.648, +2.147.483.647). Wenn Sie versuchen, einen Wert von 3.000.000.000 in diese Spalte einzufügen, gibt Snowflake eine Fehlermeldung zurück, dass der Wert außerhalb des Bereichs liegt.

Weitere Informationen zu Datentypen, einschließlich bestehender Einschränkungen, finden Sie unter Datentypen von Iceberg-Tabellen.