ALTER SCHEMA¶
修改现有架构的属性,包括重命名该架构或将其与其他架构交换,以及更改 Time Travel 数据保留期(如果您使用的是 Snowflake Enterprise Edition 或更高版本)。
语法¶
ALTER SCHEMA [ IF EXISTS ] <name> RENAME TO <new_schema_name>
ALTER SCHEMA [ IF EXISTS ] <name> SWAP WITH <target_schema_name>
ALTER SCHEMA [ 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> ]
[ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
[ LOG_LEVEL = '<log_level>' ]
[ TRACE_LEVEL = '<trace_level>' ]
[ COMMENT = '<string_literal>' ]
}
ALTER SCHEMA [ IF EXISTS ] <name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]
ALTER SCHEMA [ IF EXISTS ] <name> UNSET TAG <tag_name> [ , <tag_name> ... ]
ALTER SCHEMA [ IF EXISTS ] <name> UNSET {
DATA_RETENTION_TIME_IN_DAYS |
MAX_DATA_EXTENSION_TIME_IN_DAYS |
EXTERNAL_VOLUME |
CATALOG |
DEFAULT_DDL_COLLATION |
LOG_LEVEL |
TRACE_LEVEL |
COMMENT
}
[ , ... ]
ALTER SCHEMA [ IF EXISTS ] <name> { ENABLE | DISABLE } MANAGED ACCESS
参数¶
name
指定要更改的架构的标识符。如果标识符包含空格、特殊字符或大小写混合字符,则整个字符串必须放在双引号内。放在双引号内的标识符也区分大小写。
RENAME TO new_schema_name
指定架构的新标识符;对于数据库来说必须唯一。
有关更多详细信息,请参阅 标识符要求。
您可以将对象移至其他数据库,同时选择性重命名架构。为此,请在
db_name.new_schema_name
表单中,指定一个包含新数据库名称的限定new_schema_name
值。备注
目标数据库必须已经存在。此外,新位置中不能存在同名架构;否则,该语句将返回错误。
重命名对象时,引用该对象的其他对象必须使用新名称进行更新。
SWAP WITH target_schema_name
在两个指定的架构之间交换所有对象(表、视图等)和元数据,包括标识符。此外,交换对他们包含的架构和对象的所有访问控制权限。
SWAP WITH
本质上以单个操作重命名两个架构。SET ...
指定要为架构设置的一个(或多个)属性(用空格、逗号或新行分隔):
DATA_RETENTION_TIME_IN_DAYS = integer
指定可以对架构执行 Time Travel 操作(CLONE 和 UNDROP)的天数,并指定在架构中创建的所有表的默认 Time Travel 保留时间。
您可以指定的值取决于您使用的 Snowflake Edition:
Standard Edition:
0
或1
Enterprise Edition(或更高版本):
0
至90
MAX_DATA_EXTENSION_TIME_IN_DAYS = integer
对象参数,指定 Snowflake 可以延长架构内表的数据保留期以防止表上的流过时的最大天数。
有关此参数的详细说明,请参阅 MAX_DATA_EXTENSION_TIME_IN_DAYS。
EXTERNAL_VOLUME = external_volume_name
对象参数,指定要用于 Iceberg 表 的默认外部卷。
有关此参数的详细信息,请参阅 EXTERNAL_VOLUME。
CATALOG = catalog_integration_name
对象参数,指定要用于 Iceberg 表 的默认目录集成。
有关此参数的详细信息,请参阅 CATALOG。
DEFAULT_DDL_COLLATION = 'collation_specification'
指定以下项的默认 排序规则规范:
添加到架构中现有表的任何新列。
添加到架构的新表中的所有列。
设置该参数 不会 更改任何现有列的排序规则规范。
有关该参数的更多详细信息,请参阅 DEFAULT_DDL_COLLATION。
LOG_LEVEL = 'log_level'
指定应引入并在活动事件表中可用的消息的严重级别。引入指定级别(以及更严重级别)的消息。
TRACE_LEVEL = 'trace_level'
控制如何将跟踪事件引入到事件表中。
有关级别的更多信息,请参阅 TRACE_LEVEL。有关设置跟踪级别的更多信息,请参阅 设置跟踪级别。
TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]
指定 标签 名称和标签字符串值。
标签值始终为字符串,标签值的最大字符数为 256。
有关在语句中指定标签的信息,请参阅 对象和列的标签配额。
COMMENT = 'string_literal'
为架构添加注释或覆盖现有注释。
UNSET ...
指定要为数据库取消设置的一个(或多个)属性和/或参数,这会将它们重置为默认值:
DATA_RETENTION_TIME_IN_DAYS
MAX_DATA_EXTENSION_TIME_IN_DAYS
EXTERNAL_VOLUME
CATALOG
DEFAULT_DDL_COLLATION
TAG tag_name [ , tag_name ... ]
COMMENT
您可以使用单个 ALTER 语句重置多个属性/参数;但是,每个属性/参数 必须 用逗号分隔。重置属性/参数时,请仅指定名称;指定属性的值将返回错误。
ENABLE | DISABLE MANAGED ACCESS
为架构启用托管访问,或禁用以将托管访问架构转换为常规架构。托管访问架构将权限管理集中到架构所有者。
在常规架构中,对象的所有者(即,具有对象的 OWNERSHIP 权限的角色)可以向其他角色授予对象的进一步权限。在托管访问架构中,架构所有者管理对架构中对象的所有权限授予,包括 未来授权。对象所有者仍然具有对象的 OWNERSHIP 权限;但是,只有架构所有者可以管理对象的权限授予。
使用说明¶
要重命名架构,用于执行操作的角色必须具有架构数据库的 CREATE SCHEMA 权限和架构的 OWNERSHIP 权限。
要交换两个架构,用于执行操作的角色必须对两个架构都具有 OWNERSHIP 权限。
要将常规架构转换为托管访问架构,请执行以下操作:
架构所有者(即,具有架构的 OWNERSHIP 权限的角色)还必须具有全局 MANAGE GRANTS 权限。因为具有 MANAGE GRANTS 权限的另一个角色可能已经定义对架构中指定类型的对象的未来授权,所以需要此权限。在常规架构成为托管访问架构之后,架构所有者可以撤消未来授权,无需了解为什么具有 MANAGE GRANTS 权限的角色向他们授权。
必须使用带 FUTURE 关键字的 REVOKE <privileges>,撤消所有开放的未来授权。
在将常规架构转换为托管访问架构之后,保留以前授予的对各个对象的所有权限;但是,对象所有者不能授予对这些对象的更多权限。
要将托管访问架构转换为常规架构,仅当 当前架构已定义未来权限授予时,架构所有者才必须具有全局 MANAGE GRANTS 权限。
关于元数据:
注意
客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段。
示例¶
将架构 schema1
重命名为 schema2
:
ALTER SCHEMA IF EXISTS schema1 RENAME TO schema2;
将常规架构转换为托管访问架构:
ALTER SCHEMA schema2 ENABLE MANAGED ACCESS;