事件表概述¶
当您的 Snowflake 对象(包括过程和 UDFs)发出遥测数据时,Snowflake 将数据收集到事件表中,该表的数据可用于查询。Snowflake 默认包含一个事件表,但您也可以创建一个新表。
要收集遥测数据,您必须具有 一个活动事件表 并 设置遥测级别 以允许收集数据。如果您还没有活动事件表,Snowflake 会将默认事件表设为活动事件表。
收集遥测数据时将产生成本。要了解这些成本,或者减少或避免这些成本,请参阅 遥测数据收集成本。
什么是事件表?¶
事件表是一种特殊的数据库表,具有一组预定义的列。该表的 结构 支持 OpenTelemetry`_(一个处理遥测数据的框架)的数据模型。当 :ref:`事件表处于活动状态 <label-logging_event_table_account>
时,Snowflake 将收集表中的遥测数据(包括 Snowflake 本身生成的数据和您通过使用某些 APIs 检测处理程序代码而发出的数据)。可通过执行 SQL 查询来查看收集的数据。
安装后,Snowflake 包含一个 默认事件表,名为 SNOWFLAKE.TELEMETRY.EVENTS。此事件表处于活动状态并收集数据,直到将其停用为止。您也可以 创建自己的表。
要收集遥测数据,您必须具有一个活动事件表。有关更多信息,请参阅 使事件表处于活动状态。
默认事件表¶
默认情况下,Snowflake 包含一个名为 SNOWFLAKE.TELEMETRY.EVENTS 的默认事件表。您可以使用此事件表,而不必创建自己的事件表。如果您还没有活动事件表,Snowflake 会将该默认表设为活动事件表。
默认情况下,Snowflake 还包括一个名为 SNOWFLAKE.TELEMETRY.EVENTS_VIEW 视图 的预定义视图,此视图可让您更安全地将事件表数据提供给广泛的用户。您可以 使用行访问策略管理对视图的访问。
备注
默认事件表仅支持您创建的事件表或常规表所支持的 DDL 命令的一个子集。有关更多信息,请参阅 使用事件表。
访问默认事件表和 EVENTS_VIEW 的角色¶
Snowflake 包含以下预定义的应用程序角色,您可以使用它们来管理对默认事件表以及 EVENTS_VIEW 视图的访问。
- EVENTS_VIEWER:
具有对 EVENTS_VIEW 视图 执行 SELECT 语句的权限的角色。
- EVENTS_ADMIN:
具有以下权限的角色:
默认事件表 的 SELECT、TRUNCATE、DELETE 权限。
默认事件表的 EVENTS_VIEW 视图 的 SELECT 权限。
以下存储过程的 USAGE 权限:
此角色还具有执行存储过程的权限,以便对 EVENTS_VIEW 视图应用行访问策略 (RAP),该视图的数据基于默认事件表。
管理对 EVENTS_VIEW 的访问¶
您可以使用 行访问策略 管理对 EVENTS_VIEW 视图中数据的访问。Snowflake 提供了存储过程,可用于向 EVENT_VIEW 视图添加和移除行访问策略。
ADD_ROW_ACCESS_POLICY_ON_EVENTS_VIEW(VARCHAR、ARRAY) – 将行访问策略绑定到 EVENTS_VIEW 中的指定列。
DROP_ROW_ACCESS_POLICY_ON_EVENTS_VIEW(VARCHAR) – 删除绑定到 EVENTS_VIEW 的指定行访问策略。
创建事件表¶
要创建新的事件表,请执行 CREATE EVENT TABLE 命令并指定事件表的名称。
请注意,创建事件表时,不要指定表中的列。事件表已具有一组预定义列,如 事件表列 中所述。
您必须使用被授予 CREATE EVENT TABLE 权限的角色。
备注
当前不支持复制事件表。复制期间将跳过主数据库中包含的任何事件表。
例如,要创建名为 my_events
的事件表,请执行以下语句:
CREATE EVENT TABLE my_database.my_schema.my_events;
使事件表处于活动状态¶
要启用遥测数据的存储,必须将一个事件表指定为活动事件表。
要为账户指定活动事件表,请执行 ALTER ACCOUNT 命令,并将 EVENT_TABLE 参数设置为事件表的名称。
备注
要执行此命令,必须使用 ACCOUNTADMIN 角色。
此外,您还必须拥有以下 两项 权限:
账户的 OWNERSHIP 权限。
有关执行 ALTER ACCOUNT 所需权限的更多信息,请参阅 有关 ALTER ACCOUNT 命令的文档。
例如,要将数据库 my_database
中的架构 my_schema
中名为 my_events
的事件表设置为账户的活动事件表,请执行以下语句:
ALTER ACCOUNT SET EVENT_TABLE = my_database.my_schema.my_events;
如上所示,必须指定事件表的 完全限定名称。
要取消事件表与账户的关联,请执行 ALTER ACCOUNT 命令并取消设置 EVENT_TABLE 参数。例如:
ALTER ACCOUNT UNSET EVENT_TABLE;
您可以使用以下 SHOW PARAMETERS 命令确认 EVENT_TABLE 值:
SHOW PARAMETERS LIKE 'event_table' IN ACCOUNT;