CREATE REPLICATION GROUP

在系统中创建由指定对象组成的新复制组。

有关更多详细信息,请参阅 跨多个账户的复制和故障转移简介

此命令可用于:

  • 在源账户中创建复制组,以便将指定对象复制到同一组织中的目标账户。

  • 在目标账户中创建辅助复制组,作为同一组织中源账户中主复制组的副本。

另请参阅:

ALTER REPLICATION GROUPDROP REPLICATION GROUPSHOW REPLICATION GROUPS

语法

CREATE REPLICATION GROUP [ IF NOT EXISTS ] <name>
    OBJECT_TYPES = <object_type> [ , <object_type> , ... ]
    [ ALLOWED_DATABASES = <db_name> [ , <db_name> , ... ] ]
    [ ALLOWED_SHARES = <share_name> [ , <share_name> , ... ] ]
    [ ALLOWED_INTEGRATION_TYPES = <integration_type_name> [ , <integration_type_name> , ... ] ]
    ALLOWED_ACCOUNTS = <org_name>.<target_account_name> [ , <org_name>.<target_account_name> , ... ]
    [ IGNORE EDITION CHECK ]
    [ REPLICATION_SCHEDULE = '{ <num> MINUTE | USING CRON <expr> <time_zone> }' ]
Copy

辅助复制组

CREATE REPLICATION GROUP [ IF NOT EXISTS ] <secondary_name>
    AS REPLICA OF <org_name>.<source_account_name>.<name>
Copy

参数

name

指定复制组的标识符。标识符必须以字母字符开头,且不能包含空格或特殊字符,除非标识符字符串放在双引号内(例如 "My object")。放在双引号内的标识符也区分大小写。

有关更多详细信息,请参阅 标识符要求

OBJECT_TYPES = object_type [ , object_type , ... ]

允许从源账户复制到目标账户的对象的类型。

支持以下对象类型:

ACCOUNT PARAMETERS:

需要 Business Critical Edition(或更高版本)。

所有账户级参数。这包括 :ref:` 账户参数 <label-account_parameters>` 和可以 :doc:` 为您的账户设置的 </user-guide/admin-account-management>` 参数。

DATABASES:

将数据库对象添加到对象类型列表中。如果指定对象类型的列表中包含数据库对象,则必须设置 ALLOWED_DATABASES 参数。

INTEGRATIONS:

需要 Business Critical Edition(或更高版本)。

目前,仅支持安全性、API、存储、外部访问 [1] 和某些类型的通知集成。有关详细信息,请参阅 集成复制

如果集成对象包含在指定对象类型的列表中,则必须设置 ALLOWED_INTEGRATION_TYPES 参数。

NETWORK POLICIES:

需要 Business Critical Edition(或更高版本)。

源账户中的所有网络策略。

RESOURCE MONITORS:

需要 Business Critical Edition(或更高版本)。

源账户中的所有资源监视器。

ROLES:

需要 Business Critical Edition(或更高版本)。

源账户中的所有角色。复制角色隐式包括对复制组中包含的对象类型的所有授权。例如,如果 ROLES 是唯一复制的对象类型,则只有角色的层次结构(即授权其他角色的角色)才会复制到目标账户。如果还包含 USERS 对象类型,则还会复制向用户授权的角色。

SHARES:

将共享对象添加到对象类型列表中。如果指定对象类型的列表中包含共享对象,则必须设置 ALLOWED_SHARES 参数。

USERS:

需要 Business Critical Edition(或更高版本)。

源账户中的所有用户。

WAREHOUSES:

需要 Business Critical Edition(或更高版本)。

源账户中的所有仓库。

要将复制对象类型的列表修改为指定的目标账户,请使用 ALTER REPLICATION GROUP 重置对象类型的列表。

ALLOWED_DATABASES = db_name [ , db_name , ... ]

指定数据库或数据库列表,允许将其从源账户复制到目标账户。为了设置此参数,OBJECT_TYPES 列表必须包括 DATABASES

ALLOWED_SHARES = share_name [ , share_name , ... ]

指定共享或共享列表,允许将其从源账户复制到目标账户。为了设置此参数,OBJECT_TYPES 列表必须包括 SHARES

ALLOWED_INTEGRATION_TYPES = integration_type_name [ , integration_type_name , ... ]

需要 Business Critical Edition(或更高版本)。

允许从源账户复制到目标账户的集成类型。

此属性要求 OBJECT_TYPES 列表包含 INTEGRATIONS 以设置此参数。

支持以下集成类型:

SECURITY INTEGRATIONS:

指定安全集成。

此属性要求 OBJECT_TYPES 列表包括 ROLES

API INTEGRATIONS:

指定 API 集成。

将 API 集成复制到目标账户后,API 集成复制需要进行额外设置。有关更多信息,请参阅 更新 API 集成的远程服务

STORAGE INTEGRATIONS:

指定存储集成。

EXTERNAL ACCESS INTEGRATIONS:

指定 :doc:` 外部访问集成 </developer-guide/external-network-access/creating-using-external-network-access>`。

有关更多信息,请参阅 存储过程和用户定义函数 (UDFs) 的复制

备注

外部访问在 AWS Gov 区域处于预览状态,在 Azure Gov 区域不受支持。

NOTIFICATION INTEGRATIONS:

指定通知集成。

仅复制某些类型的通知集成。有关详细信息,请参阅 集成复制

ALLOWED_ACCOUNTS = org_name.target_account_name1 [ , org_name.target_account_name2 , ... ]

指定可将源账户中的指定对象复制到其中的目标账户或目标账户列表。

org_name

Snowflake 组织的名称。

target_account_name

要对其启用指定对象复制的目标账户。

IGNORE EDITION CHECK

在以下任一场景,允许将对象复制到较低版本的账户:

  • 只有数据库和/或共享对象的主复制组位于 Business Critical(或更高版本)账户中,但一个或多个获准复制的账户位于较低版本中。Business Critical Edition 适用于具有极其敏感数据的 Snowflake 账户。

  • 具有任何 对象类型 的主复制组位于 Business Critical(或更高版本)账户中,并且已签署业务协作协议,可根据 HIPAA 和 HITRUST 法规在账户中存储 PHI 数据。但是,对于一个或多个已批准复制的账户,无论它们是否是 Business Critical(或更高版本)账户,都没有此类协议。

默认情况下,这两种场景都是禁止的,以防止 Business Critical(或更高版本)账户的账户管理员无意中将敏感数据复制到较低版本的账户。

REPLICATION_SCHEDULE ...

指定辅助复制组的刷新计划。

  • USING CRON expr time_zone

    指定辅助组刷新的 cron 表达式和时区。支持标准 cron 实用程序语法的子集。

    有关时区列表,请参阅 ` tz 数据库时区列表 <https://en.wikipedia.org/wiki/List_of_tz_database_time_zones (link removed)>`_ (在维基百科中)。

    cron 表达式由以下字段组成:

    # __________ minute (0-59)
    # | ________ hour (0-23)
    # | | ______ day of month (1-31, or L)
    # | | | ____ month (1-12, JAN-DEC)
    # | | | | __ day of week (0-6, SUN-SAT, or L)
    # | | | | |
    # | | | | |
      * * * * *
    

    支持以下特殊字符:

    *

    通配符。指定字段的任何出现。

    L

    代表“last”。在星期几字段中使用时,它允许您指定结构,例如给定月份的“最后一个星期五”(“5L”)。在日期字段中,它指定该月的最后一天。

    /n

    指示给定时间单位的第 n 个实例。每个时间量子都是独立计算的。例如,如果在月份字段中指定 4/3,则刷新计划为 4 月、7 月和 10 月(即每 3 个月一次,从一年中的第 4 个月开始)。在随后的几年中保持相同的计划。也就是说,刷新 不会 计划在 1 月(10 月运行后 3 个月)运行。

    备注

    • cron 表达式当前仅根据指定的时区进行计算。更改账户的 TIMEZONE 参数值(或在用户或会话级别设置该值) :emph:` 不会 ` 更改刷新的时区。

    • cron 表达式定义刷新的所有 有效 运行时间。Snowflake 尝试根据此计划刷新辅助组;但是,如果在下一个有效运行时间开始之前未完成上一次运行,则跳过任何有效运行时间。

    • 当 cron 表达式中同时包含一个月中的特定某一天和一周中的某一天时,刷新将安排在满足该月中的某一天 一周中的某一天的日期。例如,SCHEDULE = 'USING CRON 0 0 10-20 * TUE,THU UTC' 计划在该月第 10 天到第 20 天之间的任何一天以及这些日期之外的星期二或星期四的 0AM 进行刷新。

  • num MINUTE

    指定刷新之间的等待时间间隔(以分钟为单位)。仅接受正整数。

    还支持 num M 语法。

    为了避免歧义,设置了 基本间隔时间

    • 创建对象时(使用 CREATE <object>) :emph:` 或 `

    • 当设置不同的间隔时(使用 ALTER <object> ...SET REPLICATION_SCHEDULE)

    基本间隔时间从当前时钟时间开始间隔计数器。例如,如果将 INTERVAL 值设置为 10,并且在 9:03 AM 启用计划刷新,则刷新将在 9:13 AM、9:23 AM 运行,以此类推。请注意,我们尽最大努力确保绝对精度,但仅保证刷新不会在设定的时间间隔发生 之前 执行(例如,在当前示例中,刷新可以首先在上午 9:14 AM 运行,但绝对不会在上午 9:12 AM 运行)。

    备注

    支持的最大值为 11520 (8 天)。如果复制计划具有更大的 num MINUTE 值,则刷新操作永远不会运行。

辅助复制组参数

secondary_name

指定辅助复制组的标识符。标识符必须以字母字符开头,且不能包含空格或特殊字符,除非标识符字符串放在双引号内(例如 "My object")。放在双引号内的标识符也区分大小写。有关更多详细信息,请参阅 标识符要求

辅助复制组 (secondary_name) 和主复制组 (name) 可以完全相同,但不是必须完全相同。

AS REPLICA OF org_name.source_account_name.name

指定要从中创建辅助复制组的主复制组的标识符。

org_name

Snowflake 组织的名称。

source_account_name

允许从中复制指定对象的源账户。

name

源账户中主复制组的标识符。

访问控制要求

用于执行此 SQL 命令的 角色 必须至少具有以下 权限

权限

对象

备注

CREATE REPLICATION GROUP

账户

Only the ACCOUNTADMIN role has this privilege by default. The privilege can be granted to additional roles as needed.

MONITOR

数据库

要将数据库添加到复制组,活动角色必须拥有对数据库的 MONITOR 权限。

OWNERSHIP

共享

要将共享添加到复制组,活动角色必须拥有对共享的 OWNERSHIP 权限。

有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色

有关对 安全对象 执行 SQL 操作的相应角色和权限授予的一般信息,请参阅 访问控制概述

使用说明

  • 账户中的故障转移组和复制组的标识符必须是唯一的。

  • 一个数据库只能添加到一个复制组或故障转移组。

  • :doc:` 入站共享 </user-guide/data-share-consumers>` (来自提供商的共享) * 不能 * 添加到复制组或故障转移组。

  • 要检索组织中已启用复制的账户组,请使用 SHOW REPLICATION ACCOUNTS

  • 要检索组织中复制组和故障转移组的列表,请使用 SHOW REPLICATION GROUPSallowed_accounts 列列出了为从源账户进行对象复制而启用的所有目标账户。

  • 如果目标账户中存在您 不希望在复制过程中删除 的账户对象(例如用户或角色),请使用 SYSTEM$LINK_ACCOUNT_OBJECTS_BY_NAME 系统函数,将全局标识符应用于通过复制以外的方式创建的对象。有关更多信息,请在创建复制组之前参阅:ref:将全局 IDs 应用于目标账户中通过脚本创建的对象<label-apply_global_ids_to_objects>

  • 使用对组具有 OWNERSHIP 权限的角色执行自动 计划的刷新操作。如果计划刷新操作因权限不足而失败,请向对组具有 OWNERSHIP 权限的角色授予所需的权限。

  • 关于元数据:

    注意

    客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段

示例

在源账户上执行

在源账户中创建名为 myrg 的复制组,并且允许将数据库 db1 和共享 s1 从源账户复制到 myaccount2 账户,以便每 10 分钟自动刷新一次:

CREATE REPLICATION GROUP myrg
    OBJECT_TYPES = DATABASES, SHARES
    ALLOWED_DATABASES = db1
    ALLOWED_SHARES = s1
    ALLOWED_ACCOUNTS = myorg.myaccount2
    REPLICATION_SCHEDULE = '10 MINUTE';
Copy

在目标账户上执行

在目标账户中创建复制组,作为源账户中复制组 myrg 的副本:

CREATE REPLICATION GROUP myrg
    AS REPLICA OF myorg.myaccount1.myrg;
Copy
语言: 中文