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>' , ... ] ) ]
  [ WITH CONTACT ( <purpose> = <contact_name> [ , <purpose> = <contact_name> ... ] ) ]
Copy

变体语法

CREATE EVENT TABLE ... CLONE

创建具有相同的 预定义列定义 的新事件表,并包含源表中的全部现有数据,而不会实际复制数据。您还可以利用此变体克隆过去的特定时间/点的事件表(使用 Time Travel):

CREATE [ OR REPLACE ] EVENT TABLE [ IF NOT EXISTS ] <name>
  CLONE <source_table>
    [ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> } ) ]
    [ COPY GRANTS ]
    [ ... ]
Copy

备注

如果该语句替换了同名的事件表,则会从正在替换的事件表中复制授权。否则,将从正在克隆的源事件表中复制授权。

For more details about COPY GRANTS, see COPY GRANTS in this document.

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

必填参数

name

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

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

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

source_table

对于 CLONE 为必填项。

指定用作克隆源的事件表。

可选参数

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 TABLE 变体创建新表时保留原始表的访问权限:

  • CREATE OR REPLACE EVENT TABLE

  • CREATE EVENT TABLE ... CLONE

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

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

注意:

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

  • The operation to copy grants occurs atomically in the CREATE EVENT TABLE command (in other words, within the same transaction).

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

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

COMMENT = 'string_literal'

指定表的注释。

默认:无值

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

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

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

有关在语句中指定标签的信息,请参阅 Tag quotas

WITH CONTACT ( purpose = contact [ , purpose = contact ...] )

将新对象与一个或多个 联系人 关联。

访问控制要求

用于执行此操作的 角色 必须至少具有以下 权限

权限

对象

备注

CREATE EVENT TABLE

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

要对架构中的任何对象执行操作,需要对父数据库和架构的 USAGE 权限。请注意,如果某个角色获授某个架构的任意权限,该角色便能够解析该架构。例如,若某角色被授予 CREATE 权限,则可以在该架构上创建对象,而无需 同时 被授予该架构的 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 EVENT TABLE ... CLONE:

    如果源事件表具有群集密钥,则新事件表具有群集密钥。默认情况下,即使源表的自动群集未暂停,新事件表的自动群集也会暂停。

  • OR REPLACEIF NOT EXISTS 子句互斥。它们不能同时用于同一条语句中。

示例

创建名为 my_events 的事件表:

CREATE EVENT TABLE my_events;
Copy
语言: 中文