地域とクラウドプラットフォーム間で安全にデータを共有する¶
このトピックでは、 複製 を使用して、データプロバイダーが異なる リージョン と クラウドプラットフォーム 間でデータコンシューマーとデータを安全に共有するための手順を提供します。
注釈
特定のコンシューマーに提供されるリストを使用して、または Snowflake Marketplace で、他のアカウントとデータを共有する場合は、 クロスクラウド自動複製 を使用してデータ製品を他のリージョンで自動的に提供することができます。データ交換で共有されているリストでは、自動複製はサポートされていません。
クロスリージョンのデータ共有は、次のクラウドプラットフォームのいずれかでホストされているSnowflakeアカウントでサポートされています。
Amazon Web Services(AWS)
Google Cloud Platform(GCP)
Microsoft Azure(Azure)
重要
元となるSnowflakeアカウントとは異なる地理的リージョンまたは国にプライマリデータベースを複製する場合は、データの転送またはホストに関する法的または規制上の制限がないことを確認する必要があります。
このトピックの内容:
データ共有に関する考慮事項¶
クロスリージョンのデータ共有では、Snowflakeのデータ複製機能が利用されるため、計画プロセスの一環としてSnowflakeの複製が機能する仕組みを理解してください。詳細については、次をご参照ください。
データプロバイダーは、地域ごとにデータセットのコピーを1つだけ作成する必要があります。消費者ごとのコピーではありません。
複数のデータベース内のオブジェクトを参照するビューを共有する場合、複製グループにこれらの他の各データベースを含む必要があります。複数のデータベースからデータを共有するには、追加の手順が必要です。手順については、 複数データベースからのデータの共有 をご参照ください。
VPS カスタマーが自動複製を有効にしている場合は、 リスト を使用して Virtual Private Snowflake(VPS) にコンテンツを共有することができます。詳細については、 Virtual Private Snowflakeでの自動複製のサポート をご参照ください。直接共有を使用した VPS との共有はサポートされていません。
異なる地域およびクラウドプラットフォームのデータコンシューマーとのデータ共有¶
Snowflakeデータプロバイダーは、いくつかの簡単な手順で、異なる地域のデータコンシューマーとデータを共有できます。
ステップ1: データ複製を設定する¶
注釈
データ複製を構成する前に、データを共有するリージョンにアカウントを作成し、ローカルアカウントにリンクする必要があります。詳細については、 組織およびアカウントの使用 をご参照ください。
データ複製の設定には、次のタスクが含まれます。
アカウントで複製を有効にします。
ORGADMIN ロールを持つユーザーは、共有するデータを含むソースアカウントと、コンシューマーとデータを共有するリージョンのターゲットアカウントの複製を有効にする必要があります。複製を有効にする手順については、 前提条件: 組織内のアカウントの複製を有効にする をご参照ください。ORGADMIN ロールの詳細については、 組織を使い始める をご参照ください。
複製グループを作成し、データベースと共有を追加します。
コンシューマーとデータを共有するリージョンに、データベースと共有のあるグループを複製します。
ステップ2:データコンシューマーとデータを共有する¶
同じリージョン内のデータコンシューマーとデータを共有するには、ソースアカウントから複製したセカンダリ共有に1つ以上のコンシューマーアカウントを追加します。
詳細な手順については、 安全なデータ共有の開始 をご参照ください。
例1: データの共有¶
データプロバイダーのAcmeは、異なる地域のデータコンシューマーとのデータ共有を望んでいます。
ソースアカウントからの実行¶
別のリージョンに複製するデータベースと共有を含む複製グループを作成するには、次の SQL ステートメントを実行します。
注釈
個々のデータベースの複製を有効にしている場合は、そのデータベースを複製グループに追加する 前 に、そのデータベースの複製を無効にする必要があります。詳細については、 データベース複製からグループベース複製への移行 をご参照ください。
データベース db1
と共有 share1
を含む複製グループ my_rg
を作成し、 acme
組織内のアカウント account_2
に複製します。
USE ROLE ACCOUNTADMIN;
CREATE REPLICATION GROUP my_rg
OBJECT_TYPES = databases, shares
ALLOWED_DATABASES = db1
ALLOWED_SHARES = share1
ALLOWED_ACCOUNTS = acme.account_2;
ターゲットアカウントからの実行¶
他のリージョンのターゲットアカウントから次の SQL ステートメントを実行します。
account_2
にセカンダリ複製グループを作成します。USE ROLE ACCOUNTADMIN; CREATE REPLICATION GROUP my_rg AS REPLICA OF acme.account1.my_rg;
Copy複製グループを手動で更新して、データベースと共有を
account_2
に複製します。ALTER REPLICATION GROUP my_rg REFRESH;
Copy1つ以上のコンシューマーアカウントを
share1
に追加します。ALTER SHARE share1 ADD ACCOUNTS = consumer_org.consumer_account_name;
Copy
ソースアカウントで ALTER REPLICATION GROUP コマンドを使用して プライマリ 複製グループに REPLICATION_SCHEDULE パラメーターを設定することで、更新操作を自動化できます。詳細については、 複製スケジュール をご参照ください
例2: データベースからデータのサブセットを共有する¶
データプロバイダーのAcmeは、データのサブセットを別の地域のデータコンシューマーと共有することを望んでいます。複製のコストを削減するために、マスターテーブルから関連する行のみを複製したいと考えています。複製はデータベースレベルで行われるため、この例では、Acmeがストリームとタスクを使用して、メインデータベースから新しいデータベースに必要な行をコピーし、共有を作成してビューに権限を付与し、コンシューマーアクセスのために複製グループ内の両方を別のリージョンのアカウントに複製する方法を説明します。このシナリオでは、新しいデータベースと共有がデータ複製のプライマリオブジェクトとして指定されます。
ソースアカウントからの実行¶
次の SQL コマンドを使用して、ソースアカウントに新しいデータベースを作成し、複製を有効にします。
注釈
個々のデータベースの複製を有効にしている場合は、そのデータベースを複製グループに追加する 前 に、そのデータベースの複製を無効にする必要があります。詳細については、 データベース複製からグループベース複製への移行 をご参照ください。
ローカルアカウントで、ソースデータを持つデータベースのデータのサブセットを持つデータベース
db1
を作成します。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';
Copy共有するデータのセキュアビューを作成します。
CREATE SECURE VIEW db1.sch.view1 AS SELECT customerid, user_order_count, total_spent FROM db1.sch.table_b;
Copyソーステーブルへの変更を記録するストリームを作成します。
CREATE STREAM mystream ON TABLE source_db.sch.table_a APPEND_ONLY = TRUE;
Copyソースデータからの変更を使用して
db1
のテーブルにデータを挿入するタスクを作成します。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';
Copyデータを更新するタスクを開始します。
ALTER TASK mytask1 RESUME;
Copy共有を作成し、権限を共有に付与します。
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;
Copyデータベースと共有でプライマリ複製グループを作成します。
CREATE REPLICATION GROUP my_rg OBJECT_TYPES = DATABASES, SHARES ALLOWED_DATABASES = db1 ALLOWED_SHARES = share1 ALLOWED_ACCOUNTS = acme_org.account_2;
Copy
ターゲットアカウントからの実行¶
他のリージョンのターゲットアカウントから次の SQL コマンドを実行します。
セカンダリ複製グループを作成して、ソースアカウントのデータベースと共有を複製します。
USE ROLE ACCOUNTADMIN; CREATE REPLICATION GROUP my_rg AS REPLICA OF acme_org.account_1.my_rg;
Copy手動でグループを更新し、現在のアカウントにオブジェクトを複製します。
ALTER REPLICATION GROUP my_rg REFRESH;
Copy1つ以上のコンシューマーアカウントを共有に追加します。
ALTER SHARE share1 ADD ACCOUNTS = consumer_org.consumer_account_name;
Copy
ソースアカウントで ALTER REPLICATION GROUP コマンドを使用して プライマリ 複製グループに REPLICATION_SCHEDULE パラメーターを設定することで、更新操作を自動化できます。詳細については、 複製スケジュール をご参照ください
例3: 複数のデータベースからデータを共有する¶
データプロバイダーのAcmeは、異なるリージョンのデータコンシューマーとの複数のデータベースからのデータ共有を望んでいます。セキュアビューと共有を作成し(手順については、 複数データベースからのデータの共有 を参照)、すべてのデータベースと共有を複製グループに複製して、他のリージョンのアカウントにデータを複製します。
ソースアカウントからの実行¶
acme
組織内の account_2
に複製する 例1: 既存のデータベースにセキュアビューを作成して共有する のデータベースと共有を含む複製グループ my_rg
を作成します。
CREATE REPLICATION GROUP my_rg
OBJECT_TYPES = databases, shares
ALLOWED_DATABASES = database1, database2, database3
ALLOWED_SHARES = share1
ALLOWED_ACCOUNTS = acme.account_2;
ターゲットアカウントからの実行¶
他のリージョンのターゲットアカウントから次の SQL コマンドを実行します。
セカンダリ複製グループを作成して、ソースアカウントのデータベースと共有を複製します。
USE ROLE ACCOUNTADMIN; CREATE REPLICATION GROUP my_rg AS REPLICA OF acme_org.account_1.my_rg;
Copy手動でグループを更新し、現在のアカウントにオブジェクトを複製します。
ALTER REPLICATION GROUP my_rg REFRESH;
Copy1つ以上のコンシューマーアカウントを共有に追加します。
ALTER SHARE share1 ADD ACCOUNTS = consumer_org.consumer_account_name;
Copy
ソースアカウントで ALTER REPLICATION GROUP コマンドを使用して プライマリ 複製グループに REPLICATION_SCHEDULE パラメーターを設定することで、更新操作を自動化できます。詳細については、 複製スケジュール をご参照ください