CREATE SCHEMA

在当前数据库中创建新架构。

该命令支持以下变体:

另请参阅:

ALTER SCHEMADESCRIBE SCHEMADROP SCHEMASHOW SCHEMASUNDROP SCHEMA

CREATE OR ALTER <对象>

语法

CREATE [ OR REPLACE ] [ TRANSIENT ] SCHEMA [ IF NOT EXISTS ] <name>
  [ CLONE <source_schema>
      [ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> } ) ]
      [ IGNORE TABLES WITH INSUFFICIENT DATA RETENTION ]
      [ IGNORE HYBRID TABLES ] ]
  [ 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> ]
  [ REPLACE_INVALID_CHARACTERS = { TRUE | FALSE } ]
  [ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
  [ STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED } ]
  [ CLASSIFICATION_PROFILE = '<classification_profile>' ]
  [ COMMENT = '<string_literal>' ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
Copy

变体语法

CREATE OR ALTER SCHEMA

如果架构尚不存在,则创建一个新架构,或将现有架构转换为语句中定义的架构。CREATE OR ALTER SCHEMA 语句遵循 CREATE SCHEMA 语句的语法规则,并具有与 ALTER SCHEMA 语句相同的限制。

有关更多信息,请参阅 CREATE OR ALTER SCHEMA 使用说明

CREATE OR ALTER [ TRANSIENT ] SCHEMA <name>
  [ 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> ]
  [ REPLACE_INVALID_CHARACTERS = { TRUE | FALSE } ]
  [ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
  [ LOG_LEVEL = '<log_level>' ]
  [ TRACE_LEVEL = '<trace_level>' ]
  [ STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED } ]
  [ COMMENT = '<string_literal>' ]
Copy

CREATE SCHEMA ... CLONE

创建使用相同参数值的新架构。

CREATE [ OR REPLACE ] SCHEMA [ IF NOT EXISTS ] <name> CLONE <source_schema>
  [ ... ]
Copy

有关更多详细信息,请参阅 CREATE <object> ...CLONE

必填参数

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 在过去特定时间点或之前克隆该架构。

IGNORE TABLES WITH INSUFFICIENT DATA RETENTION

忽略在 Time Travel 中不再具有可供克隆的历史数据的表。如果 AT | BEFORE 子句中指定的过去时间超出了数据库或架构中任何子表的数据保留期,则跳过子表的克隆操作。有关更多信息,请参阅 子对象和数据保留时间

IGNORE HYBRID TABLES

忽略混合表,不会克隆这些表。使用此选项克隆包含混合表的架构。克隆的架构包含其他对象,但会跳过混合表。

如果您不使用此选项,且您的架构包含一个或多个混合表,该命令将静默忽略混合表。但是,对于包含混合表的架构的错误处理在即将发布的版本中会发生变化;因此,您可能想要抢先将此参数添加到您的命令中。

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:01

  • Enterprise Edition:

    • 090 用于永久架构

    • 01 用于瞬态架构

默认:

  • 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

对象参数,指定要用于 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

LOG_LEVEL = 'log_level'

指定应引入并在活动事件表中可用的消息的严重级别。引入指定级别(以及更严重级别)的消息。

有关级别的更多信息,请参阅 LOG_LEVEL。有关设置日志级别的更多信息,请参阅 为日志、指标和跟踪设置级别

TRACE_LEVEL = 'trace_level'

控制如何将跟踪事件引入到事件表中。

有关级别的更多信息,请参阅 TRACE_LEVEL。有关设置跟踪级别的更多信息,请参阅 为日志、指标和跟踪设置级别

STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED }

为使用 Snowflake 作为目录的 Apache Iceberg™ 表 指定存储序列化策略。

  • COMPATIBLE:Snowflake 对数据文件执行编码和压缩,可确保与第三方计算引擎的互操作性。

  • OPTIMIZED:Snowflake 对数据文件执行编码和压缩,可确保 Snowflake 中的最佳表性能。

默认:OPTIMIZED

CLASSIFICATION_PROFILE = 'classification_profile'

将架构与分类配置文件关联起来,这样架构中的敏感数据就会进行 自动分类

COMMENT = 'string_literal'

指定架构的注释。

默认:无值

TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )

指定 标签 名称和标签字符串值。

标签值始终为字符串,标签值的最大字符数为 256。

有关在语句中指定标签的信息,请参阅 对象和列的标签配额

访问控制要求

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

权限

对象

备注

CREATE SCHEMA

数据库

可以创建常规访问架构和 :ref:` 托管访问 <label-managed_access_schemas>` 架构。

CREATE SCHEMA ...CLONE ... WITH MANAGED ACCESS

选项

所需的权限取决于源架构是托管架构还是非托管架构:

  • 托管:源架构的 OWNERSHIP。

  • 非托管:源架构的 MANAGE GRANTS ON ACCOUNT :emph:` 和 ` USAGE。

USAGE

外部卷、目录集成

分别设置 EXTERNAL_VOLUMECATALOG 对象参数时必需。

MODIFY LOG LEVEL

账户

为架构设置 LOG_LEVEL 时为必需。

MODIFY TRACE LEVEL

账户

为架构设置 TRACE_LEVEL 时为必需。

OWNERSHIP

架构

仅在为现有架构执行 CREATE OR ALTER SCHEMA 语句时需要。

OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege).

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

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

一般使用说明

  • 创建架构会自动将其设置为当前会话的活动/当前架构(相当于使用架构的 USE SCHEMA 命令)。

  • 如果数据库中已存在同名的架构,则返回错误,并且不会创建架构,除非命令中指定了可选的 OR REPLACE 关键字。

    重要

    使用 OR REPLACE 相当于对现有架构使用 DROP SCHEMA,然后创建一个同名的新架构;但是,删除的架构 不会 从系统中永久移除。相反,它保留在 Time Travel 中。这很重要,因为 Time Travel 中删除的架构有助于账户的数据存储。有关更多信息,请参阅 Time Travel 和故障安全的存储成本

  • CREATE OR REPLACE <object> 语句是原子的。也就是说,当对象被替换时,旧对象将被删除,新对象将在单个事务中创建。

  • 在托管访问架构中,架构所有者管理对所包含对象(例如表或视图)的授权,但对这些对象没有其他权限(USAGE、SELECT、DROP 等)。

  • 关于元数据:

    注意

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

CREATE OR ALTER SCHEMA 使用说明

  • ALTER SCHEMA 命令的所有限制均适用。

  • 此命令 支持以下操作:

    • 使用 SWAP WITH 参数交换架构。

    • 使用 RENAME TO 参数重命名架构。

    • 使用 CLONE 参数创建架构的克隆。

    • 添加或更改标签和策略。任何现有标签和策略都会得到保留。

    • 将 TRANSIENT 架构转换为非 TRANSIENT 架构,或者反之。

示例

创建永久架构:

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              |
+-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+---------+----------------+
Copy

创建瞬态架构:

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              |
+-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+-----------+----------------+
Copy

创建托管访问架构:

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              |
+-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+----------------+----------------+
Copy

CREATE OR ALTER SCHEMA 示例

创建简单架构

创建名为 s1 的架构:

CREATE OR ALTER SCHEMA s1;
Copy

创建或更改 s1 架构并设置属性和参数:

CREATE OR ALTER SCHEMA s1
  WITH MANAGED ACCESS
  DATA_RETENTION_TIME_IN_DAYS = 5
  DEFAULT_DDL_COLLATION = 'de';
Copy

取消先前在架构上设置的参数

在修改后的架构定义中,如果 缺少以前设置的参数,则会取消设置此参数。在以下示例中,为在前一个示例中创建的 s1 架构关闭托管访问:

CREATE OR ALTER SCHEMA s1
  DATA_RETENTION_TIME_IN_DAYS = 5
  DEFAULT_DDL_COLLATION = 'de';
Copy
语言: 中文