Bemerkung
Wenn Sie Daten für andere Konten freigeben, indem Sie Freigabeangebote für bestimmte Verbraucher oder auf Snowflake Marketplace bereitstellen, können Sie die Cloud-übergreifende automatische Ausführung verwenden, um Ihr Datenprodukt automatisch in anderen Regionen bereitzustellen. Die automatische Auftragsausführung wird für Angebote, die über eine Datenbörse freigegeben werden, nicht unterstützt.
Das regionsübergreifende Data Sharing wird bei Snowflake-Konten unterstützt, die auf einer der folgenden Cloudplattformen gehostet werden:
Wichtig
Wenn Sie eine Primärdatenbank in Konten in einer geografische Region oder in einem Land replizieren, die/das sich von der Region/dem Land unterscheidet, in der/dem sich Ihr Snowflake-Quellkonto befindet, müssen Sie sicherstellen, dass Ihre Organisation keinen rechtlichen oder behördlichen Einschränkungen hinsichtlich des Speicherorts Ihrer Daten unterliegt.
Beispiel 1: Daten freigeben
Ein Datenanbieter, Acme, möchte Daten mit Datenverbrauchern in einer anderen Region teilen.
Von Quellkonto ausführen
Um eine Replikationsgruppe zu erstellen, die die Datenbanken und Freigaben für die Replikation in eine andere Region enthält, führen Sie die folgende SQL-Anweisung aus.
Erstellen Sie eine Replikationsgruppe my_rg
, die die Datenbank db1
und die Freigabe share1
für die Replikation in das Konto account_2
der Organisation acme
enthält.
USE ROLE ACCOUNTADMIN;
CREATE REPLICATION GROUP my_rg
OBJECT_TYPES = databases, shares
ALLOWED_DATABASES = db1
ALLOWED_SHARES = share1
ALLOWED_ACCOUNTS = acme.account_2;
Von Zielkonto ausführen
Führen Sie die folgenden SQL-Anweisungen vom Zielkonto in der anderen Region aus.
Erstellen Sie dann in account_2
eine sekundäre Replikationsgruppe:
USE ROLE ACCOUNTADMIN;
CREATE REPLICATION GROUP my_rg
AS REPLICA OF acme.account1.my_rg;
Aktualisieren Sie die Replikationsgruppe manuell, um die Datenbanken und Freigaben zu account_2
zu replizieren:
ALTER REPLICATION GROUP my_rg REFRESH;
Fügen Sie ein oder mehrere Verbraucherkonten zu share1
hinzu:
ALTER SHARE share1 ADD ACCOUNTS = consumer_org.consumer_account_name;
Sie können Aktualisierungsvorgänge automatisieren, indem Sie den Parameter REPLICATION_SCHEDULE für die primäre Replikationsgruppe mit dem Befehl ALTER REPLICATION GROUP im Quellkonto festlegen. Weitere Informationen dazu finden Sie unter Replikationsplan.
Beispiel 2: Teilmenge von Daten aus einer Datenbank freigeben
Ein Datenanbieter, Acme, möchte eine Teilmenge von Daten mit Datenverbrauchern in einer anderen Region teilen. Um die Replikationskosten zu senken, sollen nur die relevanten Zeilen aus der Mastertabelle repliziert werden. Da die Replikation auf Datenbankebene erfolgt, wird in diesem Beispiel beschrieben, wie Acme mithilfe von Streams und Aufgaben die gewünschten Zeilen aus der Hauptdatenbank in eine neue Datenbank kopiert, für die Ansicht eine Freigabe erstellt und Berechtigungen erteilt und dann beides in einer Replikationsgruppe in ein Konto in einer anderen Region für den Verbraucherzugriff repliziert. In diesem Szenario werden die neue Datenbank und die Freigabe als primäre Objekte für die Datenreplikation bezeichnet.
Von Quellkonto ausführen
Verwenden Sie die folgenden SQL-Befehle, um eine neue Datenbank im Quellkonto zu erstellen und die Replikation zu aktivieren.
Erstellen Sie in Ihrem lokalen Konto eine Datenbank db1
mit einer Teilmenge von Daten aus der Datenbank mit den Quelldaten:
USE ROLE ACCOUNTADMIN;
CREATE DATABASE db1;
CREATE SCHEMA db1.sch;
CREATE TABLE db1.sch.table_b AS
SELECT customerid, user_order_count, total_spent
FROM source_db.sch.table_a
WHERE REGION='azure_eastus2';
Erstellen Sie eine sichere Ansicht mit den freizugebenden Daten:
CREATE SECURE VIEW db1.sch.view1 AS
SELECT customerid, user_order_count, total_spent
FROM db1.sch.table_b;
Erstellen Sie einen Stream, um Änderungen an der Quelltabelle zu erfassen:
CREATE STREAM mystream ON TABLE source_db.sch.table_a APPEND_ONLY = TRUE;
Erstellen Sie eine Aufgabe zum Einfügen von Daten in die Tabelle in db1
mit Änderungen aus den Quelldaten:
CREATE TASK mytask1
WAREHOUSE = mywh
SCHEDULE = '5 minute'
WHEN
SYSTEM$STREAM_HAS_DATA('mystream')
AS
INSERT INTO table_b(CUSTOMERID, USER_ORDER_COUNT, TOTAL_SPENT)
SELECT customerid, user_order_count, total_spent
FROM mystream
WHERE region='azure_eastus2'
AND METADATA$ACTION = 'INSERT';
Starten Sie die Aufgabe zum Aktualisieren der Daten:
ALTER TASK mytask1 RESUME;
Erstellen Sie eine Freigabe, und erteilen Sie der Freigabe die erforderlichen Berechtigungen:
CREATE SHARE share1;
GRANT USAGE ON DATABASE db1 TO SHARE share1;
GRANT USAGE ON SCHEMA db1.sch TO SHARE share1;
GRANT SELECT ON VIEW db1.sch.view1 TO SHARE share1;
Erstellen Sie eine primäre Replikationsgruppe mit der Datenbank und der Freigabe:
CREATE REPLICATION GROUP my_rg
OBJECT_TYPES = DATABASES, SHARES
ALLOWED_DATABASES = db1
ALLOWED_SHARES = share1
ALLOWED_ACCOUNTS = acme_org.account_2;
Von Zielkonto ausführen
Führen Sie die folgenden SQL-Befehle vom Zielkonto in der anderen Region aus.
Erstellen Sie eine sekundäre Replikationsgruppe, um die Datenbanken und Freigaben des Quellkontos zu replizieren:
USE ROLE ACCOUNTADMIN;
CREATE REPLICATION GROUP my_rg
AS REPLICA OF acme_org.account_1.my_rg;
Aktualisieren Sie die Gruppe manuell, um Objekte in das aktuelle Konto zu replizieren:
ALTER REPLICATION GROUP my_rg REFRESH;
Fügen Sie mit ein oder mehrere Verbraucherkonten zur Freigabe hinzu:
ALTER SHARE share1 ADD ACCOUNTS = consumer_org.consumer_account_name;
Sie können Aktualisierungsvorgänge automatisieren, indem Sie den Parameter REPLICATION_SCHEDULE für die primäre Replikationsgruppe mit dem Befehl ALTER REPLICATION GROUP im Quellkonto festlegen. Weitere Informationen dazu finden Sie unter Replikationsplan.
Beispiel 3: Daten aus mehreren Datenbanken freigeben
Ein Datenanbieter, Acme, möchte Daten aus mehreren Datenbanken für Datenverbraucher in einer anderen Region freigeben. Sie erstellen eine sichere Ansicht und eine Freigabe (eine Anleitung dazu finden Sie unter Freigeben von Daten aus mehreren Datenbanken) und replizieren dann alle Datenbanken und Freigaben einer Replikationsgruppe, um Daten zu Konten in anderen Regionen zu replizieren.
Von Quellkonto ausführen
Erstellen Sie eine Replikationsgruppe my_rg
, die die Datenbanken und die Freigabe von Beispiel 1: Sichere Ansicht in einer bestehenden Datenbank erstellen und freigeben für die Replikation nach account_2
der Organisation acme
enthält:
CREATE REPLICATION GROUP my_rg
OBJECT_TYPES = databases, shares
ALLOWED_DATABASES = database1, database2, database3
ALLOWED_SHARES = share1
ALLOWED_ACCOUNTS = acme.account_2;
Von Zielkonto ausführen
Führen Sie die folgenden SQL-Befehle vom Zielkonto in der anderen Region aus.
Erstellen Sie eine sekundäre Replikationsgruppe, um die Datenbanken und Freigaben des Quellkontos zu replizieren:
USE ROLE ACCOUNTADMIN;
CREATE REPLICATION GROUP my_rg
AS REPLICA OF acme_org.account_1.my_rg;
Aktualisieren Sie die Gruppe manuell, um Objekte in das aktuelle Konto zu replizieren:
ALTER REPLICATION GROUP my_rg REFRESH;
Fügen Sie mit ein oder mehrere Verbraucherkonten zur Freigabe hinzu:
ALTER SHARE share1 ADD ACCOUNTS = consumer_org.consumer_account_name;
Sie können Aktualisierungsvorgänge automatisieren, indem Sie den Parameter REPLICATION_SCHEDULE für die primäre Replikationsgruppe mit dem Befehl ALTER REPLICATION GROUP im Quellkonto festlegen. Weitere Informationen dazu finden Sie unter Replikationsplan.