CREATE SCHEMA¶
在当前数据库中创建新架构。
此外,此命令可用于 克隆现有架构,无论是在其当前状态还是在过去的特定时间/点(使用 Time Travel)。有关克隆架构的更多信息,请参阅 克隆注意事项。
语法¶
CREATE [ OR REPLACE ] [ TRANSIENT ] SCHEMA [ IF NOT EXISTS ] <name>
[ CLONE <source_schema>
[ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> } ) ] ]
[ WITH MANAGED ACCESS ]
[ 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>' ]
[ COMMENT = '<string_literal>' ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
必填参数¶
name
指定架构的标识符;对于创建架构的数据库来说必须是唯一的。
此外,标识符必须以字母字符开头,且不能包含空格或特殊字符,除非整个标识符字符串放在双引号内(例如,
"My object"
)。放在双引号内的标识符也区分大小写。有关更多详细信息,请参阅 标识符要求。
可选参数¶
TRANSIENT
将架构指定为瞬态架构。瞬态架构没有故障安全期,因此一旦它们离开 Time Travel,它们就不会产生额外的存储成本;但是,这意味着它们在数据丢失时也不会受故障安全的保护。有关更多信息,请参阅 了解和查看故障安全。
此外,根据定义,在瞬态架构中创建的所有表都是瞬态表。有关瞬态表的更多信息,请参阅 CREATE TABLE。
默认:无值(即架构是永久架构)
CLONE source_schema
指定创建指定的源架构的克隆。有关克隆架构的更多详细信息,请参阅 CREATE <object> ... CLONE。
AT | BEFORE ( TIMESTAMP => timestamp | OFFSET => time_difference | STATEMENT => id )
克隆一个架构时,AT | BEFORE 子句指定使用 Time Travel 在过去特定时间点或之前克隆该架构。
WITH MANAGED ACCESS
指定托管架构。托管访问架构将权限管理集中到架构所有者。
在常规架构中,对象的所有者(即,具有对象的 OWNERSHIP 权限的角色)可以向其他角色授予对象的进一步权限。在托管架构中,架构所有者管理架构中对对象的所有权限授权,包括 未来授权。对象所有者仍然具有对象的 OWNERSHIP 权限;但是,只有架构所有者可以管理对象的权限授予。
DATA_RETENTION_TIME_IN_DAYS = integer
指定可以对架构执行 Time Travel 操作(CLONE 和 UNDROP)的天数,并指定在架构中创建的所有表的默认 Time Travel 保留时间。有关更多详细信息,请参阅 了解和使用 Time Travel。
有关此对象级参数的详细说明以及有关对象参数的详细信息,请参阅 参数。有关表级保留时间的更多信息,请参阅 CREATE TABLE 和 了解和使用 Time Travel。
值:
Standard Edition:
0
或1
Enterprise Edition:
0
到90
用于永久架构0
或1
用于瞬态架构
默认:
Standard Edition:
1
Enterprise Edition(或更高版本):
1
(除非在数据库或账户级别指定了不同的默认值)
备注
值为
0
时会有效禁用架构的 Time Travel。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。
COMMENT = 'string_literal'
指定架构的注释。
默认:无值
访问控制要求¶
权限 |
对象 |
备注 |
---|---|---|
CREATE SCHEMA |
数据库 |
可以创建常规访问架构和 :ref:` 托管访问 <label-managed_access_schemas>` 架构。 |
CREATE SCHEMA ...CLONE ...WITH MANAGED ACCESS |
选项 |
所需的权限取决于源架构是托管架构还是非托管架构:
|
USAGE |
外部卷、目录集成 |
分别设置 |
有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色。
使用说明¶
创建架构会自动将其设置为当前会话的活动/当前架构(相当于使用架构的 USE SCHEMA 命令)。
如果数据库中已存在同名的架构,则返回错误,并且不会创建架构,除非命令中指定了可选的
OR REPLACE
关键字。重要
使用
OR REPLACE
相当于对现有架构使用 DROP SCHEMA,然后创建一个同名的新架构;但是,删除的架构 不会 从系统中永久移除。相反,它保留在 Time Travel 中。这很重要,因为 Time Travel 中删除的架构有助于账户的数据存储。有关更多信息,请参阅 Time Travel 和故障安全的存储成本。CREATE OR REPLACE <object> 语句是原子的。也就是说,当对象被替换时,旧对象将被删除,新对象将在单个事务中创建。
在托管访问架构中,架构所有者管理对所包含对象(例如表或视图)的授权,但对这些对象没有其他权限(USAGE、SELECT、DROP 等)。
关于元数据:
注意
客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段。
示例¶
创建永久架构:
CREATE SCHEMA myschema; SHOW SCHEMAS; +-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+---------+----------------+ | created_on | name | is_default | is_current | database_name | owner | comment | options | retention_time | |-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+---------+----------------| | 2018-12-10 09:34:02.127 -0800 | INFORMATION_SCHEMA | N | N | MYDB | | Views describing the contents of schemas in this database | | 1 | | 2018-12-10 09:33:56.793 -0800 | MYSCHEMA | N | Y | MYDB | PUBLIC | | | 1 | | 2018-11-26 06:08:24.263 -0800 | PUBLIC | N | N | MYDB | PUBLIC | | | 1 | +-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+---------+----------------+
创建瞬态架构:
CREATE TRANSIENT SCHEMA tschema; SHOW SCHEMAS; +-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+-----------+----------------+ | created_on | name | is_default | is_current | database_name | owner | comment | options | retention_time | |-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+-----------+----------------| | 2018-12-10 09:34:02.127 -0800 | INFORMATION_SCHEMA | N | N | MYDB | | Views describing the contents of schemas in this database | | 1 | | 2018-12-10 09:33:56.793 -0800 | MYSCHEMA | N | Y | MYDB | PUBLIC | | | 1 | | 2018-11-26 06:08:24.263 -0800 | PUBLIC | N | N | MYDB | PUBLIC | | | 1 | | 2018-12-10 09:35:32.326 -0800 | TSCHEMA | N | Y | MYDB | PUBLIC | | TRANSIENT | 1 | +-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+-----------+----------------+
创建托管访问架构:
CREATE SCHEMA mschema WITH MANAGED ACCESS; SHOW SCHEMAS; +-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+----------------+----------------+ | created_on | name | is_default | is_current | database_name | owner | comment | options | retention_time | |-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+----------------+----------------| | 2018-12-10 09:34:02.127 -0800 | INFORMATION_SCHEMA | N | N | MYDB | | Views describing the contents of schemas in this database | | 1 | | 2018-12-10 09:36:47.738 -0800 | MSCHEMA | N | Y | MYDB | ROLE1 | | MANAGED ACCESS | 1 | | 2018-12-10 09:33:56.793 -0800 | MYSCHEMA | N | Y | MYDB | PUBLIC | | | 1 | | 2018-11-26 06:08:24.263 -0800 | PUBLIC | N | N | MYDB | PUBLIC | | | 1 | | 2018-12-10 09:35:32.326 -0800 | TSCHEMA | N | Y | MYDB | PUBLIC | | TRANSIENT | 1 | +-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+----------------+----------------+