ALTER DATABASE¶
修改现有数据库的属性。
数据库修改包括以下内容:
更改数据库的名称或更改 Time Travel 数据保留期(如果您使用的是 Snowflake Enterprise Edition 或更高版本)。
启用并管理数据库复制和故障转移。
语法¶
ALTER DATABASE [ IF EXISTS ] <name> RENAME TO <new_db_name>
ALTER DATABASE [ IF EXISTS ] <name> SWAP WITH <target_db_name>
ALTER DATABASE [ IF EXISTS ] <name> SET [ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
[ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
[ EXTERNAL_VOLUME = <external_volume_name> ]
[ CATALOG = <catalog_integration_name> ]
[ REPLACE_INVALID_CHARACTERS = { TRUE | FALSE } ]
[ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
[ DEFAULT_NOTEBOOK_COMPUTE_POOL_CPU = '<compute_pool_name>' ]
[ DEFAULT_NOTEBOOK_COMPUTE_POOL_GPU = '<compute_pool_name>' ]
[ OBJECT_VISIBILITY = { <object_visibility_spec> | PRIVILEGED } ]
[ LOG_LEVEL = '<log_level>' ]
[ METRIC_LEVEL = '<metric_level>' ]
[ TRACE_LEVEL = '<trace_level>' ]
[ STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED } ]
[ EVENT_TABLE = <event_table_name> ]
[ COMMENT = '<string_literal>' ]
[ CATALOG_SYNC = '<snowflake_open_catalog_integration_name>' ]
[ REPLICABLE_WITH_FAILOVER_GROUPS = { 'YES' | 'NO' } ]
[ BASE_LOCATION_PREFIX = '<string>' ]
[ DEFAULT_STREAMLIT_NOTEBOOK_WAREHOUSE = <warehouse_name> ]
[ CLASSIFICATION_PROFILE = '<profile_name>' ]
[ CONTACT <purpose> = <contact_name> [ , <purpose> = <contact_name> ... ] ]
[ ENABLE_DATA_COMPACTION = { TRUE | FALSE } ]
[ DATA_QUALITY_MONITORING_SETTINGS = <yaml_spec> ]
ALTER DATABASE <name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]
ALTER DATABASE <name> UNSET TAG <tag_name> [ , <tag_name> ... ]
ALTER DATABASE [ IF EXISTS ] <name> UNSET { DATA_RETENTION_TIME_IN_DAYS |
MAX_DATA_EXTENSION_TIME_IN_DAYS |
EXTERNAL_VOLUME |
CATALOG |
DEFAULT_DDL_COLLATION |
DEFAULT_NOTEBOOK_COMPUTE_POOL_CPU |
DEFAULT_NOTEBOOK_COMPUTE_POOL_GPU |
OBJECT_VISIBILITY |
STORAGE_SERIALIZATION_POLICY |
EVENT_TABLE = <event_table_name> |
COMMENT |
CATALOG_SYNC |
REPLICABLE_WITH_FAILOVER_GROUPS |
BASE_LOCATION_PREFIX |
DEFAULT_STREAMLIT_NOTEBOOK_WAREHOUSE|
CLASSIFICATION_PROFILE |
CONTACT <purpose> |
ENABLE_DATA_COMPACTION
}
[ , ... ]
数据库复制和故障转移语法¶
重要
本节介绍了一种有限的 Database Replication 功能,该功能不同于 账户复制功能。Snowflake 强烈建议使用账户复制功能对数据库进行复制和故障转移。
数据库复制
ALTER DATABASE <name> ENABLE REPLICATION TO ACCOUNTS <account_identifier> [ , <account_identifier> ... ] [ IGNORE EDITION CHECK ]
ALTER DATABASE <name> DISABLE REPLICATION [ TO ACCOUNTS <account_identifier> [ , <account_identifier> ... ] ]
ALTER DATABASE <name> REFRESH
数据库故障转移
ALTER DATABASE <name> ENABLE FAILOVER TO ACCOUNTS <account_identifier> [ , <account_identifier> ... ]
ALTER DATABASE <name> DISABLE FAILOVER [ TO ACCOUNTS <account_identifier> [ , <account_identifier> ... ] ]
ALTER DATABASE <name> PRIMARY
参数¶
name指定要更改的数据库的标识符。如果标识符包含空格、特殊字符或大小写混合字符,则整个字符串必须放在双引号内。放在双引号内的标识符也区分大小写。
RENAME TO new_db_name指定数据库的新标识符,它对于您的账户必须是唯一的。
有关更多信息,请参阅 标识符要求。
重命名对象时,引用该对象的其他对象必须使用新名称进行更新。
SWAP WITH target_db_name在两个指定的数据库之间交换所有对象(架构、表、视图等)和元数据(包括标识符)。还可交换对数据库及其所含对象授予的所有访问控制权限。
SWAP WITH实质上是将两个数据库的重命名作为单个操作执行。SET ...指定要为数据库设置的一个(或多个)属性(用空格、逗号或新行分隔):
DATA_RETENTION_TIME_IN_DAYS = num指定可以对数据库执行 Time Travel 操作(CLONE 和 UNDROP)的天数,并指定在数据库中创建的所有架构的默认 Time Travel 保留时间。
您可以指定的值取决于您使用的 Snowflake Edition:
Standard Edition:
0或1Enterprise Edition(或更高版本):
0至90
MAX_DATA_EXTENSION_TIME_IN_DAYS = integer对象参数,用于指定 Snowflake 可以延长数据库中表的数据保留期以防止表上的流过时的最大天数。
有关此参数的详细说明,请参阅 MAX_DATA_EXTENSION_TIME_IN_DAYS。
EXTERNAL_VOLUME = external_volume_name对象参数,指定要用于 Apache Iceberg™ 表 的默认外部卷。
有关此参数的详细信息,请参阅 EXTERNAL_VOLUME。
CATALOG = catalog_integration_name对象参数,指定要用于 Apache Iceberg™ 表 的默认目录集成。
有关此参数的详细信息,请参阅 CATALOG。
REPLACE_INVALID_CHARACTERS = { TRUE | FALSE }指定在 Iceberg 表 的查询结果中是否使用 Unicode 替换字符 (�) 替换无效的 UTF-8 字符。您只能为使用外部 Tables 目录的表设置此参数。
TRUE会将无效的 UTF-8 字符替换为 Unicode 替换字符。FALSE保留无效的 UTF-8 字符不变。如果在 Parquet 数据文件中遇到无效的 UTF-8 字符,Snowflake 会返回用户错误消息。
默认:
FALSE
DEFAULT_DDL_COLLATION = 'collation_specification'指定以下项的默认 排序规则规范:
添加到数据库中现有表的任何新列。
添加到数据库的新表中的所有列。
设置该参数 不会 更改任何现有列的排序规则规范。
有关该参数的更多信息,请参阅 DEFAULT_DDL_COLLATION。
DEFAULT_NOTEBOOK_COMPUTE_POOL_CPU = compute_pool_nameCPU 计算池名称,用于覆盖 Snowflake 在账户中为运行 Notebooks 而配置的默认 CPU 计算池。有关更多信息,请参阅 System compute pools。
DEFAULT_NOTEBOOK_COMPUTE_POOL_GPU = compute_pool_nameGPU 计算池名称,用于覆盖 Snowflake 在账户中为运行 Notebooks 而配置的默认 GPU 计算池。有关更多信息,请参阅 System compute pools。
OBJECT_VISIBILITY = {object_visibility_spec | PRIVILEGED }-
指定数据库中对象的可见性,该可见性控制 对象的可发现性,并允许没有显式访问权限的用户查找对象并请求访问权限。
一份 YAML 规范,用于描述以下格式之一的可见性:
$$ organization_targets: - all_accounts_including_external $$
Or
$$ organization_targets: - account: <account_name_1> - account: <account_name_2> - ... - organization_user_group: <org_user_group_1> - organization_user_group: <org_user_group_2> $$
在上面的语法中:
all_accounts_including_external:选择使用 时默认使用的角色和仓库。指定组织中所有账户中的所有用户都可以看到该对象。这包括组织内的所有账户,甚至包含可能已向外部方开放访问权限的账户,例如 阅读者账户。account: account_name:选择使用 时默认使用的角色和仓库。指定账户中的所有用户均可查看该对象。您可以指定多个账户。请注意,account是账户名称,而不是账户定位器。您必须仅指定账户名称,不包括组织名称。09-22organization_user_group: org_user_group:选择使用 时默认使用的角色和仓库。指定 组织用户组 可在 已导入该用户组的所有组织账户 中查看该对象。
PRIVILEGED:选择使用 时默认使用的角色和仓库。指定仅当前账户中已被显式授予该对象权限的角色,方可查看到此对象。这是 Snowflake 中的默认行为。
有关示例,请参阅 使数据库对象在 Universal Search 中可被发现。
Default:
'PRIVILEGED' LOG_LEVEL = 'log_level'指定应引入并在活动事件表中可用的消息的严重级别。引入指定级别(以及更严重级别)的消息。
有关级别的更多信息,请参阅 LOG_LEVEL。有关设置日志级别的信息,请参阅 为日志、指标和跟踪设置级别。
METRIC_LEVEL = 'metric_level'Specifies whether metrics data should be ingested and made available in the active event table.
For more information, see METRIC_LEVEL and 为日志、指标和跟踪设置级别.
TRACE_LEVEL = 'trace_level'控制如何将跟踪事件引入到事件表中。
有关级别的更多信息,请参阅 TRACE_LEVEL。有关设置跟踪级别的信息,请参阅 为日志、指标和跟踪设置级别。
STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED }为使用 Snowflake 作为目录的 Apache Iceberg™ 表 指定存储序列化策略。
COMPATIBLE:Snowflake 对数据文件执行编码和压缩,可确保与第三方计算引擎的互操作性。OPTIMIZED:Snowflake 对数据文件执行编码和压缩,可确保 Snowflake 中的最佳表性能。
默认:
OPTIMIZED
TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]指定 标签 名称和标签字符串值。
标签值始终为字符串,标签值的最大字符数为 256。
有关在语句中指定标签的信息,请参阅 Tag quotas。
CONTACT purpose = contact [ , purpose = contact ... ]将现有对象与一个或多个 联系人 关联起来。
您不能在同一语句中使用其他属性设置 CONTACT 属性。
EVENT_TABLE = event_table_name指定应从数据库中的对象(如过程和 UDFs)收集遥测数据的事件表的完全限定名称。
有关更多信息,请参阅 将事件表与对象关联。
在 Enterprise Edition 或更高版本 中可以将事件表与数据库关联起来。
CLASSIFICATION_PROFILE = 'profile_name'Sets a classification profile on the database to implement sensitive data classification for all of the tables and views in the database.
指定
profile_name为分类配置文件(即 CLASSIFICATION_PROFILE 类的实例)的完全限定名称。COMMENT = 'string_literal'为数据库添加注释或覆盖现有注释。
CATALOG_SYNC = 'snowflake_open_catalog_integration_name'指定为 Snowflake Open Catalog 配置的目录集成的名称。如果已指定,Snowflake 会将数据库中 Snowflake 管理的 Apache Iceberg™ 表与 Snowflake Open Catalog 账户中的外部目录同步。有关将 Snowflake 管理的 Iceberg 表与 Open Catalog 同步的详细信息,请参阅 将 Snowflake 管理的表与 Snowflake Open Catalog 同步。
有关此参数的详细信息,请参阅 CATALOG_SYNC。
默认:无值
REPLICABLE_WITH_FAILOVER_GROUPS = { 'YES' | 'NO' }指定数据库中的所有架构是否符合复制条件。您可以为数据库将此属性设置为
NO,然后通过为这些架构将等效属性设置为YES,从而允许某些架构进行复制。有关此参数的详细信息,请参阅 故障转移组的架构级复制。
默认:
'YES'DEFAULT_STREAMLIT_NOTEBOOK_WAREHOUSE指定使用 SQL 创建笔记本时要使用的默认仓库。
BASE_LOCATION_PREFIX = 'string'指定 Snowflake 在 Snowflake 管理的 Apache Iceberg™ 表的写入路径中使用的前缀。有关更多信息,请参阅“Snowflake 参数”主题中的 Iceberg 表的数据和元数据目录 和 BASE_LOCATION_PREFIX。
默认:无值
ENABLE_DATA_COMPACTION = { TRUE | FALSE }指定 Snowflake 是否应对 Snowflake 管理的 Apache Iceberg™ 表 启用数据压缩功能。
TRUE:选择使用 时默认使用的角色和仓库。Snowflake 对表执行数据压缩。FALSE:选择使用 时默认使用的角色和仓库。Snowflake 不会对表执行数据压缩。
Default:
TRUE有关更多信息,请参阅 ENABLE_DATA_COMPACTION 和 。
DATA_QUALITY_MONITORING_SETTINGS = yaml_spec-
Specifies settings that control whether notifications are sent when data quality issues are detected in the database. Set the property to a dollar-quoted YAML specification in the following format:
$$ notification: enabled: <boolean> integrations: - <notification_integration> metadata_included: <boolean> $$
在上面的语法中:
enabled: Iftrue, notifications are sent when there is a data quality issue.integrations: Specifies a list of notification integrations that provide an interface between Snowflake and a third-party messaging service that sends the notifications.metadata_included: Iftrue, the notification includes metadata that identifies which object within the database had the data quality issue. Iffalse, the notification is sent, but it doesn't identify which object had the issue.
For more information about setting this parameter, including an example, see 为数据质量通知配置数据库设置.
UNSET ...指定要为数据库取消设置的一个(或多个)属性和/或参数,这会将它们重置为默认值:
DATA_RETENTION_TIME_IN_DAYSMAX_DATA_EXTENSION_TIME_IN_DAYSEXTERNAL_VOLUMECATALOGDEFAULT_DDL_COLLATIONTAG tag_name [ , tag_name ... ]DEFAULT_NOTEBOOK_COMPUTE_POOL_CPUDEFAULT_NOTEBOOK_COMPUTE_POOL_GPUSTORAGE_SERIALIZATION_POLICYEVENT_TABLE = event_table_nameCOMMENTCATALOG_SYNCREPLICABLE_WITH_FAILOVER_GROUPSBASE_LOCATION_PREFIXDEFAULT_STREAMLIT_NOTEBOOK_WAREHOUSECLASSIFICATION_PROFILECONTACT purposeENABLE_DATA_COMPACTION
您可以使用单个 ALTER 语句重置多个属性/参数;但是,每个属性/参数 必须 用逗号分隔。重置属性/参数时,请仅指定名称;指定属性的值将返回错误。
您不能在同一语句中使用其他属性取消设置 CONTACT 属性。
数据库复制和故障转移参数¶
重要
本节介绍了一种有限的 Database Replication 功能,该功能不同于 账户复制功能。Snowflake 强烈建议使用账户复制功能对数据库进行复制和故障转移。
ENABLE REPLICATION TO ACCOUNTS account_identifier [ , account_identifier ... ]将本地数据库提升为用于复制的主数据库。主数据库可以在一个或多个账户中复制,使这些账户中的用户可以查询各个 *辅助*(即副本)数据库中的对象。
或者,修改现有主数据库,以添加到可存储数据库副本的账户列表或从该列表中移除。
提供组织中可存储此数据库副本的账户列表(用逗号分隔)。
account_identifier账户的唯一标识符。首选标识符为
organization_name.account_name。若要查看组织中已启用复制的账户列表,请查询 SHOW REPLICATION ACCOUNTS。虽然旧版账户定位器也可以用作账户标识符,但不建议使用,因为旧版账户定位器未来可能无法运行。有关使用账户定位器作为账户标识符的更多信息,请参阅 数据库复制和故障转移使用说明。
IGNORE EDITION CHECK允许在以下任一场景中将数据复制到较低版本的账户:
主数据库位于 Business Critical(或更高版本)账户中,但批准复制的一个或多个账户位于较低版本中。Business Critical Edition 适用于具有极其敏感数据的 Snowflake 账户。
主数据库位于 Business Critical(或更高版本)账户中,并且已签署业务伙伴协议,可根据 HIPAA 和 HITRUST 法规在账户中存储 PHI 数据,但一个或多个获准复制的账户未签署此类协议,无论它们是否为 Business Critical(或更高版本)账户。
默认情况下,这两种场景都是禁止的,以防止 Business Critical(或更高版本)账户的账户管理员无意中将敏感数据复制到较低版本的账户。
DISABLE REPLICATION [ TO ACCOUNTS account_identifier [ , account_identifier ... ] ]禁用对此主数据库的复制,这意味着无法刷新其他账户中此数据库的副本(即辅助数据库)。任何辅助数据库仍链接到主数据库,但刷新辅助数据库的请求将被拒绝。
请注意,禁用对主数据库的复制并不会阻止将其复制到同一账户;因此,SHOW REPLICATION DATABASES 输出中仍将列出该数据库。
(可选)提供组织中以逗号分隔的账户列表,从而仅在指定账户中禁用对此数据库的复制。
account_identifier账户的唯一标识符。首选标识符为
organization_name.account_name。若要查看组织中已启用复制的账户列表,请查询 SHOW REPLICATION ACCOUNTS。虽然旧版账户定位器也可以用作账户标识符,但不建议使用,因为旧版账户定位器未来可能无法运行。有关使用账户定位器作为账户标识符的更多信息,请参阅 数据库复制和故障转移使用说明。
REFRESH根据主数据库的快照刷新辅助数据库。快照包括对对象和数据的更改。
ENABLE FAILOVER TO ACCOUNTS account_identifier [ , account_identifier ... ]指定组织中以逗号分隔的账户列表,在此列表中,可以将此主数据库的副本提升为主数据库。
account_identifier账户的唯一标识符。首选标识符为
organization_name.account_name。若要查看组织中已启用复制的账户列表,请查询 SHOW REPLICATION ACCOUNTS。虽然旧版账户定位器也可以用作账户标识符,但不建议使用,因为旧版账户定位器未来可能无法运行。有关使用账户定位器作为账户标识符的更多信息,请参阅 数据库复制和故障转移使用说明。
DISABLE FAILOVER [ TO ACCOUNTS account_identifier [ , account_identifier ... ] ]禁用对此主数据库的故障转移,这意味着不能将此数据库的副本(即辅助数据库)提升为主数据库。
(可选)提供组织中以逗号分隔的账户列表,从而仅在指定账户中禁用对此数据库的故障转移。
account_identifier账户的唯一标识符。首选标识符为
organization_name.account_name。若要查看组织中已启用复制的账户列表,请查询 SHOW REPLICATION ACCOUNTS。虽然旧版账户定位器也可以用作账户标识符,但不建议使用,因为旧版账户定位器未来可能无法运行。有关使用账户定位器作为账户标识符的更多信息,请参阅 数据库复制和故障转移使用说明。
PRIMARY将指定的辅助(副本)数据库提升为主数据库。升级后,数据库变为可写入。同时,先前的主数据库变成了只读辅助数据库。
使用说明¶
若要重命名数据库,用于执行操作的角色必须对数据库具有 CREATE DATABASE 全局权限和 OWNERSHIP 权限。
若要交换两个数据库,用于执行操作的角色必须对这两个数据库都具有 OWNERSHIP 权限。
若要更新注释,用于执行操作的角色必须被授予或继承对数据库的 MODIFY 权限。
关于元数据:
注意
客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段。
数据库复制和故障转移使用说明¶
重要
本节介绍了一种有限的 Database Replication 功能,该功能不同于 账户复制功能。Snowflake 强烈建议使用账户复制功能对数据库进行复制和故障转移。
只有账户管理员(具有 ACCOUNTADMIN 角色的用户)才能启用并管理数据库复制和故障转移。
当主数据库初始复制到辅助数据库时,将应用默认的 10 TB 大小限制。要更改或移除这一大小限制,请在账户级别设置 INITIAL_REPLICATION_SIZE_LIMIT_IN_TB 参数。
请注意,当前没有默认大小限制应用于辅助数据库的后续刷新。
识别账户的首选方法是使用组织名称和账户名称作为账户标识符。如果您决定改用旧版账户定位器,请参阅 用于复制和故障转移的账户标识符。
一般示例¶
将数据库 db1 重命名为 db2:
ALTER DATABASE IF EXISTS db1 RENAME TO db2;
Database Replication 示例¶
重要
本节介绍了一种有限的 Database Replication 功能,该功能不同于 账户复制功能。Snowflake 强烈建议使用账户复制功能对数据库进行复制和故障转移。
使用复制组或故障转移组对单个数据库进行复制和故障转移。有关示例,请参阅以下内容之一:
