地域とクラウドプラットフォーム間で安全にデータを共有する

このトピックでは、 複製 を使用して、データプロバイダーが異なる リージョンクラウドプラットフォーム 間でデータコンシューマーとデータを安全に共有するための手順を提供します。

注釈

特定のコンシューマーに提供されるリストを使用して、または Snowflake Marketplace で、他のアカウントとデータを共有する場合は、 クロスクラウド自動複製 を使用してデータ製品を他のリージョンで自動的に提供することができます。データ交換で共有されているリストでは、自動複製はサポートされていません。

クロスリージョンのデータ共有は、次のクラウドプラットフォームのいずれかでホストされているSnowflakeアカウントでサポートされています。

  • Amazon Web Services(AWS)

  • Google Cloud Platform(GCP)

  • Microsoft Azure(Azure)

重要

元となるSnowflakeアカウントとは異なる地理的リージョンまたは国にプライマリデータベースを複製する場合は、データの転送またはホストに関する法的または規制上の制限がないことを確認する必要があります。

このトピックの内容:

データ共有に関する考慮事項

Diagram of data replication and sharing between regions and clouds

異なる地域およびクラウドプラットフォームのデータコンシューマーとのデータ共有

Snowflakeデータプロバイダーは、いくつかの簡単な手順で、異なる地域のデータコンシューマーとデータを共有できます。

ステップ1: データ複製を設定する

注釈

データ複製を構成する前に、データを共有するリージョンにアカウントを作成し、ローカルアカウントにリンクする必要があります。詳細については、 組織およびアカウントの使用 をご参照ください。

データ複製の設定には、次のタスクが含まれます。

  1. アカウントで複製を有効にします。

    ORGADMIN ロールを持つユーザーは、共有するデータを含むソースアカウントと、コンシューマーとデータを共有するリージョンのターゲットアカウントの複製を有効にする必要があります。複製を有効にする手順については、 前提条件: 組織内のアカウントの複製を有効にする をご参照ください。ORGADMIN ロールの詳細については、 組織を使い始める をご参照ください。

  2. 複製グループを作成し、データベースと共有を追加します。

  3. コンシューマーとデータを共有するリージョンに、データベースと共有のあるグループを複製します。

ステップ2:データコンシューマーとデータを共有する

同じリージョン内のデータコンシューマーとデータを共有するには、ソースアカウントから複製したセカンダリ共有に1つ以上のコンシューマーアカウントを追加します。

詳細な手順については、 安全なデータ共有の開始 をご参照ください。

例1: データの共有

データプロバイダーのAcmeは、異なる地域のデータコンシューマーとのデータ共有を望んでいます。

Diagram of a basic example on how to share data between regions

ソースアカウントからの実行

別のリージョンに複製するデータベースと共有を含む複製グループを作成するには、次の 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;
Copy

ターゲットアカウントからの実行

他のリージョンのターゲットアカウントから次の SQL ステートメントを実行します。

  1. account_2 にセカンダリ複製グループを作成します。

    USE ROLE ACCOUNTADMIN;
    
    CREATE REPLICATION GROUP my_rg
      AS REPLICA OF acme.account1.my_rg;
    
    Copy
  2. 複製グループを手動で更新して、データベースと共有を account_2 に複製します。

    ALTER REPLICATION GROUP my_rg REFRESH;
    
    Copy
  3. 1つ以上のコンシューマーアカウントを share1 に追加します。

    ALTER SHARE share1 ADD ACCOUNTS = consumer_org.consumer_account_name;
    
    Copy

ソースアカウントで ALTER REPLICATION GROUP コマンドを使用して プライマリ 複製グループに REPLICATION_SCHEDULE パラメーターを設定することで、更新操作を自動化できます。詳細については、 複製スケジュール をご参照ください

例2: データベースからデータのサブセットを共有する

データプロバイダーのAcmeは、データのサブセットを別の地域のデータコンシューマーと共有することを望んでいます。複製のコストを削減するために、マスターテーブルから関連する行のみを複製したいと考えています。複製はデータベースレベルで行われるため、この例では、Acmeがストリームとタスクを使用して、メインデータベースから新しいデータベースに必要な行をコピーし、共有を作成してビューに権限を付与し、コンシューマーアクセスのために複製グループ内の両方を別のリージョンのアカウントに複製する方法を説明します。このシナリオでは、新しいデータベースと共有がデータ複製のプライマリオブジェクトとして指定されます。

Diagram of an advanced example on how to share data between regions

ソースアカウントからの実行

次の SQL コマンドを使用して、ソースアカウントに新しいデータベースを作成し、複製を有効にします。

注釈

個々のデータベースの複製を有効にしている場合は、そのデータベースを複製グループに追加する に、そのデータベースの複製を無効にする必要があります。詳細については、 データベース複製からグループベース複製への移行 をご参照ください。

  1. ローカルアカウントで、ソースデータを持つデータベースのデータのサブセットを持つデータベース 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
  2. 共有するデータのセキュアビューを作成します。

    CREATE SECURE VIEW db1.sch.view1 AS
      SELECT customerid, user_order_count, total_spent
      FROM db1.sch.table_b;
    
    Copy
  3. ソーステーブルへの変更を記録するストリームを作成します。

    CREATE STREAM mystream ON TABLE source_db.sch.table_a APPEND_ONLY = TRUE;
    
    Copy
  4. ソースデータからの変更を使用して 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
  5. データを更新するタスクを開始します。

    ALTER TASK mytask1 RESUME;
    
    Copy
  6. 共有を作成し、権限を共有に付与します。

    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
  7. データベースと共有でプライマリ複製グループを作成します。

    CREATE REPLICATION GROUP my_rg
      OBJECT_TYPES = DATABASES, SHARES
      ALLOWED_DATABASES = db1
      ALLOWED_SHARES = share1
      ALLOWED_ACCOUNTS = acme_org.account_2;
    
    Copy

ターゲットアカウントからの実行

他のリージョンのターゲットアカウントから次の SQL コマンドを実行します。

  1. セカンダリ複製グループを作成して、ソースアカウントのデータベースと共有を複製します。

    USE ROLE ACCOUNTADMIN;
    
    CREATE REPLICATION GROUP my_rg
      AS REPLICA OF acme_org.account_1.my_rg;
    
    Copy
  2. 手動でグループを更新し、現在のアカウントにオブジェクトを複製します。

    ALTER REPLICATION GROUP my_rg REFRESH;
    
    Copy
  3. 1つ以上のコンシューマーアカウントを共有に追加します。

    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;
Copy

ターゲットアカウントからの実行

他のリージョンのターゲットアカウントから次の SQL コマンドを実行します。

  1. セカンダリ複製グループを作成して、ソースアカウントのデータベースと共有を複製します。

    USE ROLE ACCOUNTADMIN;
    
    CREATE REPLICATION GROUP my_rg
      AS REPLICA OF acme_org.account_1.my_rg;
    
    Copy
  2. 手動でグループを更新し、現在のアカウントにオブジェクトを複製します。

    ALTER REPLICATION GROUP my_rg REFRESH;
    
    Copy
  3. 1つ以上のコンシューマーアカウントを共有に追加します。

    ALTER SHARE share1 ADD ACCOUNTS = consumer_org.consumer_account_name;
    
    Copy

ソースアカウントで ALTER REPLICATION GROUP コマンドを使用して プライマリ 複製グループに REPLICATION_SCHEDULE パラメーターを設定することで、更新操作を自動化できます。詳細については、 複製スケジュール をご参照ください