跨区域和云平台安全共享数据¶
本主题提供有关使用 复制 的说明,以允许数据提供商与不同 区域 和 云平台 的数据使用者安全地共享数据。
备注
如果您使用提供给特定使用者的列表与其他账户共享数据,或者在 Snowflake Marketplace 上共享数据,则可以使用 Cross-Cloud Auto-Fulfillment 自动履行您的数据产品,提供给其他区域。与数据交换中心共享的列表不支持自动履行。
以下任意云平台上托管的 Snowflake 账户均支持跨区域数据共享:
Amazon Web Services (AWS)
Google Cloud Platform (GCP)
Microsoft Azure (Azure)
重要
如果将主数据库复制到不同于源 Snowflake 账户的地理区域或国家/地区,则应确认您的组织在传输或托管数据的位置方面不受任何法律或法规限制。
本主题内容:
数据共享注意事项¶
跨区域数据共享利用了 Snowflake 数据复制功能,因此在规划过程中,应该了解复制在 Snowflake 中的工作原理。有关更多信息,请参阅:
数据提供商只需为每个区域创建一个数据集副本;而不必为每一个使用者创建一个副本。
在共享引用多个数据库中对象的视图时,复制组中必须包括所涉及的全部其他数据库。若要共享多个数据库的数据,则需要执行额外的步骤。有关说明,请参阅 共享来自多个数据库的数据。
如果 VPS 客户已启用自动履行,则可以使用 列表 将内容共享到 Virtual Private Snowflake (VPS)。有关更多详细信息,请参阅 Virtual Private Snowflake 中的自动履行支持。不支持使用直接共享方式共享到 VPS 和从 VPS 共享。
与不同区域和云平台的数据使用者共享数据¶
Snowflake 数据提供商只需执行几个简单的步骤,即可与不同区域的数据使用者共享数据。
第 1 步:设置数据复制¶
备注
在配置数据复制之前,必须在要共享数据的区域中创建一个账户,并将其关联到您的本地账户。有关更多信息,请参阅 使用 Organizations 和账户。
数据复制的设置涉及到以下任务:
为您的账户启用复制。
拥有 ORGADMIN 角色的用户必须为包含待共享数据的源账户及要与使用者共享数据的区域中的目标账户启用复制。有关启用复制的说明,请参阅 先决条件:为组织中的账户启用复制。有关 ORGADMIN 角色的详细信息,请参阅 组织功能入门。
创建复制组并添加数据库和共享。
将具有数据库和共享的组复制到要与使用者共享数据的区域。
第 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;
在目标账户上执行¶
在另一个区域中的目标账户内执行以下 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;
Copy将一个或多个使用者账户添加到
share1
:ALTER SHARE share1 ADD ACCOUNTS = consumer_org.consumer_account_name;
Copy
您可以在源账户中使用 ALTER REPLICATION GROUP 命令,设置 主要 复制组的 REPLICATION_SCHEDULE 参数,以自动执行刷新操作。有关更多信息,请参阅 复制计划。
示例 2:共享数据库内的一个数据子集¶
数据提供商 Acme 想与不同区域的数据使用者共享数据子集。为降低复制成本,他们希望仅复制主表中的相关行。由于复制在数据库级别完成,此示例描述了 Acme 如何使用流和任务,将所需行从主数据库复制到新数据库,创建共享并授予对视图的权限,以及将复制组中的两者复制到不同区域中的账户,以供使用者访问。在此情景中,新数据库和共享被指定为数据复制的主要对象。
在源账户中执行¶
使用以下 SQL 命令,在源账户中新建数据库并启用复制。
备注
如果先前为单个数据库启用了复制,则必须先为该数据库禁用数据库复制,然后才能将其添加到复制组。有关详细信息,请参阅 从 Database Replication 转换为基于组的复制。
在本地账户中,使用包含源数据的数据库中的数据子集创建一个
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;
Copy将一个或多个使用者账户添加到共享:
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;
在目标账户上执行¶
从另一个区域中的目标账户执行以下 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;
Copy将一个或多个使用者账户添加到共享:
ALTER SHARE share1 ADD ACCOUNTS = consumer_org.consumer_account_name;
Copy
您可以在源账户中使用 ALTER REPLICATION GROUP 命令,设置 主要 复制组的 REPLICATION_SCHEDULE 参数,以自动执行刷新操作。有关更多信息,请参阅 复制计划。