跨区域和云平台安全共享数据

本主题提供有关使用 复制 的说明,以允许数据提供商与不同 区域云平台 的数据使用者安全地共享数据。

备注

如果您使用提供给特定使用者的列表与其他账户共享数据,或者在 Snowflake Marketplace 上共享数据,则可以使用 Cross-Cloud Auto-Fulfillment 自动履行您的数据产品,提供给其他区域。与数据交换中心共享的列表不支持自动履行。

以下任意云平台上托管的 Snowflake 账户均支持跨区域数据共享:

  • Amazon Web Services (AWS)

  • Google Cloud Platform (GCP)

  • Microsoft Azure (Azure)

重要

如果将主数据库复制到不同于源 Snowflake 账户的地理区域或国家/地区,则应确认您的组织在传输或托管数据的位置方面不受任何法律或法规限制。

本主题内容:

数据共享注意事项

区域和云之间数据复制和共享示意图

与不同区域和云平台的数据使用者共享数据

Snowflake 数据提供商只需执行几个简单的步骤,即可与不同区域的数据使用者共享数据。

第 1 步:设置数据复制

备注

在配置数据复制之前,必须在要共享数据的区域中创建一个账户,并将其关联到您的本地账户。有关更多信息,请参阅 使用 Organizations 和账户

数据复制的设置涉及到以下任务:

  1. 为您的账户启用复制。

    拥有 ORGADMIN 角色的用户必须为包含待共享数据的源账户及要与使用者共享数据的区域中的目标账户启用复制。有关启用复制的说明,请参阅 先决条件:为组织中的账户启用复制。有关 ORGADMIN 角色的详细信息,请参阅 组织功能入门

  2. 创建复制组并添加数据库和共享。

  3. 将具有数据库和共享的组复制到要与使用者共享数据的区域。

第 2 步:与数据使用者共享数据

与同一区域中的数据使用者共享数据涉及到将一个或多个使用者账户添加到从源账户复制的辅助共享。

有关详细说明,请参阅 Secure Data Sharing 入门

示例 1:共享数据

数据提供商 Acme 想与不同区域的数据使用者共享数据。

关于如何在区域之间共享数据的基本示例示意图

在源账户中执行

要创建复制组,在其中包含要复制到另一个区域的数据库和共享,请执行以下 SQL 语句。

备注

如果先前为单个数据库启用了复制,则必须先为该数据库禁用数据库复制,然后才能将其添加到复制组。有关详细信息,请参阅 从 Database Replication 转换为基于组的复制

创建一个包含数据库 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. 将一个或多个使用者账户添加到 share1

    ALTER SHARE share1 ADD ACCOUNTS = consumer_org.consumer_account_name;
    
    Copy

您可以在源账户中使用 ALTER REPLICATION GROUP 命令,设置 主要 复制组的 REPLICATION_SCHEDULE 参数,以自动执行刷新操作。有关更多信息,请参阅 复制计划

示例 2:共享数据库内的一个数据子集

数据提供商 Acme 想与不同区域的数据使用者共享数据子集。为降低复制成本,他们希望仅复制主表中的相关行。由于复制在数据库级别完成,此示例描述了 Acme 如何使用流和任务,将所需行从主数据库复制到新数据库,创建共享并授予对视图的权限,以及将复制组中的两者复制到不同区域中的账户,以供使用者访问。在此情景中,新数据库和共享被指定为数据复制的主要对象。

关于如何在区域之间共享数据的高级示例示意图

在源账户中执行

使用以下 SQL 命令,在源账户中新建数据库并启用复制。

备注

如果先前为单个数据库启用了复制,则必须先为该数据库禁用数据库复制,然后才能将其添加到复制组。有关详细信息,请参阅 从 Database Replication 转换为基于组的复制

  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. 将一个或多个使用者账户添加到共享:

    ALTER SHARE share1 ADD ACCOUNTS = consumer_org.consumer_account_name;
    
    Copy

您可以在源账户中使用 ALTER REPLICATION GROUP 命令,设置 主要 复制组的 REPLICATION_SCHEDULE 参数,以自动执行刷新操作。有关更多信息,请参阅 复制计划

示例 3:共享多个数据库中的数据

数据提供商 Acme 想与不同区域的数据使用者共享多个数据库中的数据。他们创建了安全视图和共享(有关说明,请参阅 共享来自多个数据库的数据),然后在一个复制组内复制所有这些数据和共享,从而将数据复制到其他区域中的账户。

在源账户中执行

创建一个 示例 1:在现有数据库中创建和共享安全视图 中的数据库和共享的 my_rg 复制组,并将其复制到 acme 组织中的 account_2

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. 将一个或多个使用者账户添加到共享:

    ALTER SHARE share1 ADD ACCOUNTS = consumer_org.consumer_account_name;
    
    Copy

您可以在源账户中使用 ALTER REPLICATION GROUP 命令,设置 主要 复制组的 REPLICATION_SCHEDULE 参数,以自动执行刷新操作。有关更多信息,请参阅 复制计划

语言: 中文