CREATE EVENT TABLE

创建用于获取事件的 事件表,包括来自函数和过程的记录消息。

另请参阅:

ALTER TABLE(事件表)DESCRIBE EVENT TABLEDROP TABLESHOW EVENT TABLES

语法

CREATE [ OR REPLACE ] EVENT TABLE [ IF NOT EXISTS ] <name>
  [ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ]
  [ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
  [ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
  [ CHANGE_TRACKING = { TRUE | FALSE } ]
  [ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
  [ COPY GRANTS ]
  [ [ WITH ] COMMENT = '<string_literal>' ]
  [ [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
Copy

必填参数

name

指定事件表的标识符(名称);对于在其中创建事件表的架构必须是唯一的。

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

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

可选参数

CLUSTER BY ( expr [ , expr , ... ] )

将表中的一个或多个列或列表达式指定为群集密钥。有关更多详细信息,请参阅 群集密钥和聚类表

默认:无值(未为表定义群集密钥)

重要

群集密钥 并非 旨在或建议用于所有表;它们通常有利于非常大(即多 TB)的表。

在为表指定群集密钥之前,请阅读 了解 Snowflake 表结构

DATA_RETENTION_TIME_IN_DAYS = integer

指定表的保留期,以便可以对表中的历史数据执行 Time Travel 操作(SELECT、CLONE、UNDROP)。有关更多详细信息,请参阅 了解和使用 Time Travel

有关此对象级参数的详细说明以及有关对象参数的详细信息,请参阅 参数

值:

  • Standard Edition:01

  • Enterprise Edition:

    • 090 用于永久表

默认:

  • Standard Edition:1

  • Enterprise Edition(或更高版本):1 (除非在架构、数据库或账户级别指定了不同的默认值)

备注

0 值实际上会为表禁用 Time Travel。

MAX_DATA_EXTENSION_TIME_IN_DAYS = integer

对象参数,指定 Snowflake 可以延长表的数据保留期以防止表上的流过时的最大天数。

有关此参数的详细说明,请参阅 MAX_DATA_EXTENSION_TIME_IN_DAYS

CHANGE_TRACKING = TRUE | FALSE

指定是否对表启用变更跟踪。

  • TRUE 在表上启用变更跟踪。此设置将一对隐藏列添加到源表中,并开始在列中存储变更跟踪元数据。这些列会占用少量存储空间。

    可以使用 SELECT 语句的 CHANGES 子句查询变更跟踪元数据,也可以通过在表上创建和查询一个或多个流来查询变更跟踪元数据。

  • FALSE 不在表上启用变更跟踪。

默认:FALSE

DEFAULT_DDL_COLLATION = 'collation_specification'

为表中的列指定默认 排序规则规范

有关该参数的更多详细信息,请参阅 DEFAULT_DDL_COLLATION

COPY GRANTS

指定在使用 CREATE OR REPLACE EVENT TABLE 创建新表时保留原始表的访问权限。

该参数将 OWNERSHIP 之外的所有权限从现有表复制到新表。新表 不会 继承为架构中的对象类型定义的任何未来授权。默认情况下,执行 CREATE EVENT TABLE 语句的角色拥有新表。

如果该参数未包含在 CREATE EVENT TABLE 语句中,则新表 不会 继承在原始表上授予的任何显式访问权限,但会继承为架构中的对象类型定义的任何未来授权。

注意:

  • 借助 数据共享

    • 如果现有表已共享到另一个账户,则替换表也会共享。

    • 如果现有表已作为数据使用者与您的账户共享,并且进一步授予了对账户中其他角色的访问权限(在父数据库上使用 GRANT IMPORTED PRIVILEGES),则还会授予对替换表的访问权限。

  • 替换表的 SHOW GRANTS 输出会将复制权限的获得者列为执行 CREATE EVENT TABLE 语句的角色,并附带执行语句时的当前时间戳。

  • 复制授权的操作在 CREATE EVENT TABLE 命令中会以原子方式发生(即在同一事务中)。

ROW ACCESS POLICY policy_name ON ( col_name [ , col_name ... ] )

指定要在表上设置的 行访问策略

COMMENT = 'string_literal'

指定表的注释。

默认:无值

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

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

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

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

访问控制要求

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

权限

对象

备注

CREATE EVENT TABLE

计划在其中创建事件表的架构。

请注意,对架构中的对象进行操作还需要对父数据库和架构具有 USAGE 权限。

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

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

使用说明

  • 架构不能包含具有相同名称的事件表、表和/或视图。创建事件表时:

    • 如果架构中已存在同名的表或视图,则返回错误,并且不会创建事件表。

    • 如果架构中已存在同名的事件表,将返回错误且不会创建事件表,除非命令中包含可选 OR REPLACE 关键字。

    重要

    使用 OR REPLACE 等效于对现有事件表使用 DROP TABLE,然后创建一个同名的新事件表;但是,被弃用的表 不会 从系统中永久移除。相反,它保留在 Time Travel 中。请务必注意,因为 Time Travel 中丢弃的表可以恢复,但它们也有助于您账户的数据存储。有关更多信息,请参阅 Time Travel 和故障安全的存储成本

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

    这意味着与 CREATE OR REPLACE EVENT TABLE 操作并行的任何查询都使用旧的或新的表版本。

  • 重新创建表(使用可选 OR REPLACE 关键字)会删除其历史记录,这会使表上的任何流都过时。过时的流是不可读的。

  • 关于元数据:

    注意

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

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

示例

创建名为 my_events 的事件表:

CREATE EVENT TABLE my_events;
Copy
语言: 中文