Konfigurieren der Replikation für von Snowflake verwaltete Apache Iceberg™-Tabellen¶
Mit diesem Feature können Sie von Snowflake verwaltete Apache Iceberg™-Tabellen von einem Quellkonto in ein oder mehrere Zielkonten derselben Organisation replizieren.
Die Replikation für Iceberg-Tabellen funktioniert ähnlich wie die Replikation für normale Snowflake-Tabellen. Snowflake repliziert eine Iceberg-Tabelle, wenn Sie deren übergeordnete Datenbank zu einer Failover- oder Replikationsgruppe hinzufügen.
Von Snowflake verwaltete Iceberg-Tabellen sind jedoch auf externe Volumen angewiesen, bei denen es sich um Objekte auf Kontoebene handelt, die eine zusätzliche Konfiguration erfordern, um eine Verbindung zu Ihrem externen Cloudspeicher herzustellen. Bevor Sie eine Iceberg-Tabelle replizieren können, müssen Sie die Replikation für externe Volumen konfigurieren.
Aktivieren Sie die öffentliche Vorschau für die Replikation von Snowflake-verwalteten Iceberg-Tabellen¶
Um diese öffentliche Vorschau zu aktivieren, müssen Sie sowohl das Quell- als auch das Zielkonto aktivieren.
Um Ihr Quellkonto zu aktivieren, verwenden Sie nach der Aktivierung der Vorschau-Features für Ihr Konto den ALTER ACCOUNT-Befehl, um die folgenden Parameter auf Kontoebene zu aktivieren:
ENABLE_ICEBERG_MANAGED_TABLE_REPLICATION
Bemerkung
Sie können diesen Parameter auch auf Ebene der Failover-Gruppe aktivieren.
ENABLE_SELECTIVE_EXTERNAL_VOLUME_REPLICATION_PUPR
Beispiel:
ALTER ACCOUNT SET ENABLE_ICEBERG_MANAGED_TABLE_REPLICATION = TRUE ENABLE_SELECTIVE_EXTERNAL_VOLUME_REPLICATION_PUPR = TRUE;
Wiederholen Sie den vorherigen Schritt für Ihr Zielkonto.
Aktivieren der Replikation¶
Ein Benutzer mit der Rolle ORGADMIN muss die Replikation für jedes Quell- und Zielkonto in der Organisation aktivieren:
USE ROLE ORGADMIN;
SELECT SYSTEM$GLOBAL_ACCOUNT_SET_PARAMETER(
'<organization_name>.<account_name>',
'ENABLE_ACCOUNT_DATABASE_REPLICATION',
'true');
Weitere Informationen dazu finden Sie unter Voraussetzung: Replikation für Konten in Ihrer Organisation aktivieren.
Weitere Informationen zur Replikation finden Sie unter Einführung in Replikation und Failover über mehrere Konten.
Replizieren eines externen Volumen mithilfe einer Failover-Gruppe¶
Diese Schritte bieten einen Beispiel-Workflow für das Replizieren eines externen Volumens und der davon abhängenden Iceberg-Tabellen in ein Zielkonto unter Verwendung einer Failover-Gruppe.
Wichtig
Wenn eine Failover-Gruppe in Ihrem Quellkonto externe Volumen enthält, löscht Snowflake während eines Aktualisierungsvorgangs alle bereits vorhandenen externen Volumen im Zielkonto aus dem Zielkonto.
Beispiel:
Das Quellkonto hat ein externes Volume mit dem Namen
ext_vol_1.Das Zielkonto hat zwei externe Volumen mit den Namen
ext_vol_2undext_vol_3.
Während eines Aktualisierungsvorgangs erstellt oder synchronisiert Snowflake ein Replikat von ext_vol_1 im Zielkonto, löscht jedoch ext_vol_2 und ext_vol_3 aus dem Zielkonto.
Bemerkung
Wenn Sie noch kein externes Volume haben, können Sie eines mit den gewünschten Speicherorten erstellen, einschließlich eines Speicherorts in derselben Region wie Ihr Zielkonto. Nachdem Sie den Speicherzugriff für jeden Speicherort konfiguriert haben, können Sie eine Iceberg-Tabelle erstellen und replizieren, die auf das externe Volume verweist.
Um ein externes Volume zu erstellen, siehe Externes Volume konfigurieren.
Aktualisieren Sie im Quellkonto Ihr externes Volume, um einen Speicherort in derselben Region wie Ihr Zielkonto hinzuzufügen.
Beispiel:
ALTER EXTERNAL VOLUME exvol1 ADD STORAGE_LOCATION = ( NAME = 'my-s3-us-central-2' STORAGE_PROVIDER = 'S3' STORAGE_BASE_URL = 's3://my_bucket_us_central-2/' STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::123456789012:role/myrole' STORAGE_AWS_EXTERNAL_ID = 'iceberg_table_external_id' );
Wichtig
Wenn Sie keine eigene
STORAGE_AWS_EXTERNAL_IDfür S3-Speicher angeben, müssen Sie DESCRIBE EXTERNAL VOLUME aufrufen, nachdem Sie den neuen Speicherort hinzugefügt haben, um die von Snowflake generierte externe ID abzurufen. Sie benötigen die externe ID, um im nächsten Schritt den Zugriff auf S3 zu konfigurieren.Snowflake legt diesen neuen Speicherort als Aktiver Speicherort für das sekundäre externe Volume fest.
Erstellen Sie im Quellkonto eine von Snowflake verwaltete Iceberg-Tabelle, die das externe Volumen verwendet, das Sie mit dem zusätzlichen Speicherort aktualisiert haben.
Beispiel:
CREATE ICEBERG TABLE my_iceberg_table (amount int) CATALOG = 'SNOWFLAKE' EXTERNAL_VOLUME = 'exvol1' BASE_LOCATION = 'my_iceberg_table';
Rufen Sie im Quellkonto Informationen über den Snowflake-Dienstprinzipal für Ihr Zielkonto ab, indem Sie folgende Schritte ausführen:
Rufen Sie den Namen (
account_name) Ihres Zielkontos unter Verwendung des SHOW REPLICATION ACCOUNTS-Befehls ab.SHOW REPLICATION ACCOUNTS LIKE 'my_target_account%';
Rufen Sie die Systemfunktion SYSTEM$DESC_ICEBERG_ACCESS_IDENTITY auf. Geben Sie den Cloudanbieter für den Zielspeicherort und den Namen Ihres Zielkontos genau so an, wie er in der
account_name-Spalte der SHOW REPLICATION ACCOUNTS-Ausgabe angezeigt wird.Beispiel:
SELECT SYSTEM$DESC_ICEBERG_ACCESS_IDENTITY('S3', 'MY_TARGET_ACCOUNT_1');
Konfigurieren Sie den Snowflake-Zugriff auf den Speicherort, der mit Ihrem Zielkonto verbunden ist. Folgen Sie den Anweisungen für Ihren Cloudanbieter und verwenden Sie dabei die Informationen, die Sie für den Dienstprinzipal im Zielkonto abgerufen haben:
Externes Volume für Amazon S3 konfigurieren. Verwenden Sie die externe ID, die mit dem Speicherort für Ihr Zielkonto verbunden ist.
Externes Volume für Azure konfigurieren. Ersetzen Sie in der
AZURE_CONSENT_URL TEMPLATE, die von SYSTEM$DESC_ICEBERG_ACCESS_IDENTITY zurückgegeben wird,your_tenant_idmit der ID für Ihren Mandanten, zu dem der Speicherort gehört.
Verwenden Sie im Quellkonto den CREATE FAILOVER GROUP-Befehl, um eine Failover-Gruppe zu erstellen. Geben
EXTERNAL VOLUMESin derOBJECT_TYPES-Liste an. Fügen Sie in derALLOWED_DATABASES-Liste die Datenbank mit den Iceberg-Tabellen hinzu, die Sie replizieren möchten. Fügen Sie in derALLOWED_EXTERNAL_VOLUMES-Liste die externen Volumen hinzu, die Zugriff auf die Iceberg-Tabellen bieten, die Sie replizieren möchten.CREATE FAILOVER GROUP my_iceberg_fg OBJECT_TYPES = DATABASES, EXTERNAL VOLUMES ALLOWED_DATABASES = my_iceberg_database ALLOWED_EXTERNAL_VOLUMES = my_external_volume ALLOWED_ACCOUNTS = myorg.my_account_1;
Bemerkung
Wenn Sie einen SQL-Parser-Fehler erhalten, dann ist Ihre Liste der zulässigen externen Volumen möglicherweise zu lang. Wenn Sie diesen Fehler erhalten, kürzen Sie diese Liste in Ihrer CREATE FAILOVER GROUP-Anweisung und verwenden Sie dann den ALTER FAILOVER GROUP-Befehl, um der Failover-Gruppe weitere zulässige externe Volumen hinzuzufügen.
Zur Aktualisierung einer bestehenden Gruppe verwenden Sie den ALTER FAILOVER GROUP-Befehl, um
EXTERNAL VOLUMESzurOBJECT_TYPES-Liste hinzuzufügen. Schließen Sie alle anderen vorhandenen Objekte in dieOBJECT_TYPES-Liste ein, um zu vermeiden, dass diese Objekte im Zielkonto gelöscht werden.Fügen Sie zum Beispiel
EXTERNAL VOLUMESzu einer Failover-Gruppe hinzu, die bereitsDATABASESenthält:ALTER FAILOVER GROUP my_iceberg_rg SET OBJECT_TYPES = DATABASES, EXTERNAL VOLUMES ALLOWED_EXTERNAL_VOLUMES = my_external_volume;
Erstellen Sie im Zielkonto eine Failover-Gruppe als Replikat der Gruppe im Quellkonto (
my_source_account):CREATE FAILOVER GROUP my_iceberg_fg AS REPLICA OF myorg.my_source_account.my_iceberg_fg;
Überspringen Sie diesen Schritt, wenn Sie bereits eine sekundäre Gruppe haben, die die Gruppe im Quellkonto repliziert.
Führen Sie im Zielkonto einen Aktualisierungsbefehl aus.
ALTER FAILOVER GROUP my_iceberg_fg REFRESH;
Solange Sie die Datenbank replizieren, die Ihre von Snowflake verwaltete Iceberg-Tabelle enthält, und Sie den Zugriff auf Ihren Cloudspeicher für das Zielkonto konfiguriert haben, repliziert Snowflake die Tabelle im Zielkonto.
Bemerkung
Die Aktualisierungsoperation schlägt fehl, wenn Snowflake nicht auf den für das Zielkonto konfigurierten Speicherort zugreifen kann. Wenn dies geschieht, überprüfen Sie Ihre Zugriffssteuerungseinstellungen, oder versuchen Sie es mit dem Überprüfen des Speicherzugriffs.
Replizieren eines externen Volumen mithilfe einer Replikationsgruppe¶
Diese Schritte bieten einen Beispiel-Workflow für das Replizieren eines externen Volumens und der davon abhängenden Iceberg-Tabellen in ein Zielkonto unter Verwendung einer Replikationsgruppe.
Wichtig
Wenn eine Replikationsgruppe in Ihrem Quellkonto externe Volumen enthält, löscht Snowflake während eines Aktualisierungsvorgangs alle bereits vorhandenen externen Volumen im Zielkonto aus dem Zielkonto.
Beispiel:
Das Quellkonto hat ein externes Volume mit dem Namen
ext_vol_1.Das Zielkonto hat zwei externe Volumen mit den Namen
ext_vol_2undext_vol_3.
Während eines Aktualisierungsvorgangs erstellt oder synchronisiert Snowflake ein Replikat von ext_vol_1 im Zielkonto, löscht jedoch ext_vol_2 und ext_vol_3 aus dem Zielkonto.
Bemerkung
Wenn Sie noch kein externes Volume haben, können Sie eines mit den gewünschten Speicherorten erstellen, einschließlich eines Speicherorts in derselben Region wie Ihr Zielkonto. Nachdem Sie den Speicherzugriff für jeden Speicherort konfiguriert haben, können Sie eine Iceberg-Tabelle erstellen und replizieren, die auf das externe Volume verweist.
Um ein externes Volume zu erstellen, siehe Externes Volume konfigurieren.
Aktualisieren Sie im Quellkonto Ihr externes Volume, um einen Speicherort in derselben Region wie Ihr Zielkonto hinzuzufügen.
Beispiel:
ALTER EXTERNAL VOLUME exvol1 ADD STORAGE_LOCATION = ( NAME = 'my-s3-us-central-2' STORAGE_PROVIDER = 'S3' STORAGE_BASE_URL = 's3://my_bucket_us_central-2/' STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::123456789012:role/myrole' STORAGE_AWS_EXTERNAL_ID = 'iceberg_table_external_id' );
Wichtig
Wenn Sie keine eigene
STORAGE_AWS_EXTERNAL_IDfür S3-Speicher angeben, müssen Sie DESCRIBE EXTERNAL VOLUME aufrufen, nachdem Sie den neuen Speicherort hinzugefügt haben, um die von Snowflake generierte externe ID abzurufen. Sie benötigen die externe ID, um im nächsten Schritt den Zugriff auf S3 zu konfigurieren.Snowflake legt diesen neuen Speicherort als Aktiver Speicherort für das sekundäre externe Volume fest.
Erstellen Sie im Quellkonto eine von Snowflake verwaltete Iceberg-Tabelle, die das externe Volumen verwendet, das Sie mit dem zusätzlichen Speicherort aktualisiert haben.
Beispiel:
CREATE ICEBERG TABLE my_iceberg_table (amount int) CATALOG = 'SNOWFLAKE' EXTERNAL_VOLUME = 'exvol1' BASE_LOCATION = 'my_iceberg_table';
Rufen Sie im Quellkonto Informationen über den Snowflake-Dienstprinzipal für Ihr Zielkonto ab, indem Sie folgende Schritte ausführen:
Rufen Sie den Namen (
account_name) Ihres Zielkontos unter Verwendung des SHOW REPLICATION ACCOUNTS-Befehls ab.SHOW REPLICATION ACCOUNTS LIKE 'my_target_account%';
Rufen Sie die Systemfunktion SYSTEM$DESC_ICEBERG_ACCESS_IDENTITY auf. Geben Sie den Cloudanbieter für den Zielspeicherort und den Namen Ihres Zielkontos genau so an, wie er in der
account_name-Spalte der SHOW REPLICATION ACCOUNTS-Ausgabe angezeigt wird.Beispiel:
SELECT SYSTEM$DESC_ICEBERG_ACCESS_IDENTITY('S3', 'MY_TARGET_ACCOUNT_1');
Konfigurieren Sie den Snowflake-Zugriff auf den Speicherort, der mit Ihrem Zielkonto verbunden ist. Folgen Sie den Anweisungen für Ihren Cloudanbieter und verwenden Sie dabei die Informationen, die Sie für den Dienstprinzipal im Zielkonto abgerufen haben:
Externes Volume für Amazon S3 konfigurieren. Verwenden Sie die externe ID, die mit dem Speicherort für Ihr Zielkonto verbunden ist.
Externes Volume für Azure konfigurieren. Ersetzen Sie in der
AZURE_CONSENT_URL TEMPLATE, die von SYSTEM$DESC_ICEBERG_ACCESS_IDENTITY zurückgegeben wird,your_tenant_idmit der ID für Ihren Mandanten, zu dem der Speicherort gehört.
Verwenden Sie im Quellkonto den CREATE REPLICATION GROUP-Befehl, um eine Replikationsgruppe zu erstellen. Geben
EXTERNAL VOLUMESin derOBJECT_TYPES-Liste an. Fügen Sie in derALLOWED_DATABASES-Liste die Datenbank mit den Iceberg-Tabellen hinzu, die Sie replizieren möchten. Fügen Sie in derALLOWED_EXTERNAL_VOLUMES-Liste die externen Volumen hinzu, die Zugriff auf die Iceberg-Tabellen bieten, die Sie replizieren möchten.CREATE REPLICATION GROUP my_iceberg_rg OBJECT_TYPES = DATABASES, EXTERNAL VOLUMES ALLOWED_DATABASES = my_iceberg_database ALLOWED_EXTERNAL_VOLUMES = my_external_volume ALLOWED_ACCOUNTS = myorg.my_account_1;
Bemerkung
Wenn Sie einen SQL-Parser-Fehler erhalten, dann ist Ihre Liste der zulässigen externen Volumen möglicherweise zu lang. Wenn Sie diesen Fehler erhalten, kürzen Sie diese Liste in Ihrer CREATE REPLICATION GROUP-Anweisung und verwenden Sie dann den ALTER REPLICATION GROUP-Befehl, um der Replikationsgruppe weitere zulässige externe Volumen hinzuzufügen.
Zur Aktualisierung einer bestehenden Gruppe verwenden Sie den ALTER REPLICATION GROUP-Befehl, um
EXTERNAL VOLUMESzurOBJECT_TYPES-Liste hinzuzufügen. Schließen Sie alle anderen vorhandenen Objekte in dieOBJECT_TYPES-Liste ein, um zu vermeiden, dass diese Objekte im Zielkonto gelöscht werden.Fügen Sie zum Beispiel
EXTERNAL VOLUMESzu einer Replikationsgruppe hinzu, die bereitsDATABASESenthält:ALTER REPLICATION GROUP my_iceberg_rg SET OBJECT_TYPES = DATABASES, EXTERNAL VOLUMES ALLOWED_EXTERNAL_VOLUMES = my_external_volume;
Erstellen Sie im Zielkonto eine Replikationsgruppe als Replikat der Gruppe im Quellkonto (
my_source_account):CREATE REPLICATION GROUP my_iceberg_rg AS REPLICA OF myorg.my_source_account.my_iceberg_rg;
Überspringen Sie diesen Schritt, wenn Sie bereits eine sekundäre Gruppe haben, die die Gruppe im Quellkonto repliziert.
Führen Sie im Zielkonto einen Aktualisierungsbefehl aus.
ALTER REPLICATION GROUP my_iceberg_rg REFRESH;
Solange Sie die Datenbank replizieren, die Ihre von Snowflake verwaltete Iceberg-Tabelle enthält, und Sie den Zugriff auf Ihren Cloudspeicher für das Zielkonto konfiguriert haben, repliziert Snowflake die Tabelle im Zielkonto.
Bemerkung
Die Aktualisierungsoperation schlägt fehl, wenn Snowflake nicht auf den für das Zielkonto konfigurierten Speicherort zugreifen kann. Wenn dies geschieht, überprüfen Sie Ihre Zugriffssteuerungseinstellungen, oder versuchen Sie es mit dem Überprüfen des Speicherzugriffs.
Hinweise und Einschränkungen¶
Beachten Sie die folgenden Punkte, wenn Sie die Replikation für Iceberg-Tabellen verwenden:
Snowflake unterstützt derzeit nur die Replikation von Snowflake-verwalteten Tabellen.
Die Replikation von konvertierten Iceberg-Tabellen wird nicht unterstützt. Snowflake überspringt konvertierte Tabellen bei Aktualisierungsoperationen.
Für replizierte Tabellen müssen Sie den Zugriff auf einen Speicherort in derselben Region wie das Zielkonto konfigurieren.
Wenn Sie einen Speicherort löschen oder ändern, der für die Replikation auf dem primären externen Volumen verwendet wird, können Aktualisierungsoperationen fehlschlagen.
Sekundäre Tabellen im Zielkonto sind schreibgeschützt, bis Sie das Zielkonto zum Quellkonto heraufstufen.
Snowflake verwaltet die Verzeichnishierarchie der primären Iceberg-Tabelle für die sekundäre Tabelle.
Für dieses Feature fallen Replikationskosten an. Weitere Informationen dazu finden Sie unter Erläuterungen zu den Replikationskosten.
Hinweise zu den Kontoobjekten für Replikations- und Failover-Gruppen finden Sie unter Kontoobjekte.