CREATE EVENT TABLE¶
创建用于获取事件的 事件表,包括来自函数和过程的记录消息。
语法¶
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>' , ... ] ) ]
必填参数¶
name
指定事件表的标识符(名称);对于在其中创建事件表的架构必须是唯一的。
此外,标识符必须以字母字符开头,且不能包含空格或特殊字符,除非整个标识符字符串放在双引号内(例如,
"My object"
)。放在双引号内的标识符也区分大小写。有关更多详细信息,请参阅 标识符要求。
可选参数¶
CLUSTER BY ( expr [ , expr , ... ] )
将表中的一个或多个列或列表达式指定为群集密钥。有关更多详细信息,请参阅 群集密钥和聚类表。
默认:无值(未为表定义群集密钥)
DATA_RETENTION_TIME_IN_DAYS = integer
指定表的保留期,以便可以对表中的历史数据执行 Time Travel 操作(SELECT、CLONE、UNDROP)。有关更多详细信息,请参阅 了解和使用 Time Travel。
有关此对象级参数的详细说明以及有关对象参数的详细信息,请参阅 参数。
值:
Standard Edition:
0
或1
Enterprise Edition:
0
至90
用于永久表
默认:
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'
指定表的注释。
默认:无值
访问控制要求¶
权限 |
对象 |
备注 |
---|---|---|
CREATE EVENT TABLE |
计划在其中创建事件表的架构。 |
请注意,对架构中的对象进行操作还需要对父数据库和架构具有 USAGE 权限。
有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色。
使用说明¶
架构不能包含具有相同名称的事件表、表和/或视图。创建事件表时:
如果架构中已存在同名的表或视图,则返回错误,并且不会创建事件表。
如果架构中已存在同名的事件表,将返回错误且不会创建事件表,除非命令中包含可选
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;