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.

  1. 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;
    
    Copy
  2. 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');
Copy

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_2 und ext_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.

  1. 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'
     );
    
    Copy

    Wichtig

    Wenn Sie keine eigene STORAGE_AWS_EXTERNAL_ID fü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.

  2. 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';
    
    Copy
  3. Rufen Sie im Quellkonto Informationen über den Snowflake-Dienstprinzipal für Ihr Zielkonto ab, indem Sie folgende Schritte ausführen:

    1. Rufen Sie den Namen (account_name) Ihres Zielkontos unter Verwendung des SHOW REPLICATION ACCOUNTS-Befehls ab.

      SHOW REPLICATION ACCOUNTS LIKE 'my_target_account%';
      
      Copy
    2. 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');
      
      Copy
  4. 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:

  5. Verwenden Sie im Quellkonto den CREATE FAILOVER GROUP-Befehl, um eine Failover-Gruppe zu erstellen. Geben EXTERNAL VOLUMES in der OBJECT_TYPES-Liste an. Fügen Sie in der ALLOWED_DATABASES-Liste die Datenbank mit den Iceberg-Tabellen hinzu, die Sie replizieren möchten. Fügen Sie in der ALLOWED_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;
    
    Copy

    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 VOLUMES zur OBJECT_TYPES-Liste hinzuzufügen. Schließen Sie alle anderen vorhandenen Objekte in die OBJECT_TYPES-Liste ein, um zu vermeiden, dass diese Objekte im Zielkonto gelöscht werden.

    Fügen Sie zum Beispiel EXTERNAL VOLUMES zu einer Failover-Gruppe hinzu, die bereits DATABASES enthält:

    ALTER FAILOVER GROUP my_iceberg_rg SET
      OBJECT_TYPES = DATABASES, EXTERNAL VOLUMES
      ALLOWED_EXTERNAL_VOLUMES = my_external_volume;
    
    Copy
  6. 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;
    
    Copy

    Überspringen Sie diesen Schritt, wenn Sie bereits eine sekundäre Gruppe haben, die die Gruppe im Quellkonto repliziert.

  7. Führen Sie im Zielkonto einen Aktualisierungsbefehl aus.

    ALTER FAILOVER GROUP my_iceberg_fg REFRESH;
    
    Copy

    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_2 und ext_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.

  1. 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'
     );
    
    Copy

    Wichtig

    Wenn Sie keine eigene STORAGE_AWS_EXTERNAL_ID fü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.

  2. 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';
    
    Copy
  3. Rufen Sie im Quellkonto Informationen über den Snowflake-Dienstprinzipal für Ihr Zielkonto ab, indem Sie folgende Schritte ausführen:

    1. Rufen Sie den Namen (account_name) Ihres Zielkontos unter Verwendung des SHOW REPLICATION ACCOUNTS-Befehls ab.

      SHOW REPLICATION ACCOUNTS LIKE 'my_target_account%';
      
      Copy
    2. 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');
      
      Copy
  4. 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:

  5. Verwenden Sie im Quellkonto den CREATE REPLICATION GROUP-Befehl, um eine Replikationsgruppe zu erstellen. Geben EXTERNAL VOLUMES in der OBJECT_TYPES-Liste an. Fügen Sie in der ALLOWED_DATABASES-Liste die Datenbank mit den Iceberg-Tabellen hinzu, die Sie replizieren möchten. Fügen Sie in der ALLOWED_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;
    
    Copy

    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 VOLUMES zur OBJECT_TYPES-Liste hinzuzufügen. Schließen Sie alle anderen vorhandenen Objekte in die OBJECT_TYPES-Liste ein, um zu vermeiden, dass diese Objekte im Zielkonto gelöscht werden.

    Fügen Sie zum Beispiel EXTERNAL VOLUMES zu einer Replikationsgruppe hinzu, die bereits DATABASES enthält:

    ALTER REPLICATION GROUP my_iceberg_rg SET
      OBJECT_TYPES = DATABASES, EXTERNAL VOLUMES
      ALLOWED_EXTERNAL_VOLUMES = my_external_volume;
    
    Copy
  6. 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;
    
    Copy

    Überspringen Sie diesen Schritt, wenn Sie bereits eine sekundäre Gruppe haben, die die Gruppe im Quellkonto repliziert.

  7. Führen Sie im Zielkonto einen Aktualisierungsbefehl aus.

    ALTER REPLICATION GROUP my_iceberg_rg REFRESH;
    
    Copy

    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.