事件表概述¶
当您的 Snowflake 对象(包括过程和 UDFs)发出遥测数据时,Snowflake 将数据收集到事件表中,该表的数据可用于查询。Snowflake 默认包含一个事件表,但您也可以创建一个新表。
要收集遥测数据,您必须具有一个活动事件表并 设置遥测级别 以允许收集数据。如果您还没有活动事件表,Snowflake 会将默认事件表设为活动事件表。
收集遥测数据时将产生成本。要了解这些成本,或者减少或避免这些成本,请参阅 遥测数据收集成本。
什么是事件表?¶
事件表是一种特殊的数据库表,具有一组预定义的列。该表的 结构 支持 `OpenTelemetry`_(一个处理遥测数据的框架)的数据模型。当事件表处于活动状态时,Snowflake 将收集表中的遥测数据(包括 Snowflake 本身生成的数据和您通过使用某些 APIs 检测处理程序代码而发出的数据)。可通过执行 SQL 查询来查看收集的数据。
安装后,Snowflake 包含一个 默认事件表,名为 SNOWFLAKE.TELEMETRY.EVENTS。此事件表处于活动状态并收集数据,直到将其停用为止。您也可以 创建自己的表。
使用默认事件表¶
如果未设置活动事件表,Snowflake 会将使用名为 SNOWFLAKE.TELEMETRY.EVENTS 的默认事件表作为活动事件表。您还可以针对特定用途 创建自己的事件表。
默认情况下,Snowflake 还包括一个名为 SNOWFLAKE.TELEMETRY.EVENTS_VIEW 视图 的预定义视图,此视图可让您更安全地将事件表数据提供给广泛的用户。您可以 使用行访问策略管理对视图的访问。
备注
默认事件表仅支持您创建的事件表或常规表所支持的 DDL 命令的一个子集。有关更多信息,请参阅 使用事件表。
访问默认事件表和 EVENTS_VIEW 的角色¶
Snowflake 提供了以下预定义的应用程序角色,可用于管理对默认事件表和 EVENTS_VIEW 视图的访问权限:具有 ACCOUNTADMIN 角色的人员可以访问默认事件表和 EVENTS_VIEW 视图,并且可以将此处描述的角色授予其他角色,从而赋予其访问权限。
您必须向其他角色(而不是用户)授予这些角色。例如,您可以向您为更广泛的管理用途而创建的另一个管理员角色授予 EVENTS_ADMIN 角色。
GRANT APPLICATION ROLE SNOWFLAKE.EVENTS_ADMIN TO ROLE my_admin_role
GRANT APPLICATION ROLE SNOWFLAKE.EVENTS_VIEWER TO ROLE my_analysis_role
- 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 命令并指定事件表的名称。
备注
如果不创建事件表,Snowflake 会使用默认事件表来收集遥测数据。
通过执行 CREATE EVENT TABLE 命令:ref:
创建事件表 <label-logging_event_table_custom_create>
,为事件表指定名称。通过在对象上执行 ALTER <object> 命令,将 EVENT_TABLE 参数设置为事件表的名称,将事件表与对象关联。
这会将事件表捕获的数据范围设定为与该表关联的对象。
创建事件表¶
要创建事件表,请执行 CREATE EVENT TABLE 命令。
创建事件表时,不要指定表中的列。事件表已具有一组预定义列,如 事件表列 中所述。
确保您使用的角色具有 CREATE EVENT TABLE 权限。
通过执行 CREATE EVENT TABLE 命令创建事件表,为事件表指定名称。
您可以使用事件表名称 将表与对象(如数据库)关联。
例如,要创建名为
my_events
的事件表,请执行以下语句:CREATE EVENT TABLE my_database.my_schema.my_events;
备注
当前不支持复制事件表。复制期间将跳过主数据库中包含的任何事件表。
将事件表与对象关联¶
要指定活动事件表的对象,请对该对象执行 ALTER <object> 命令。
Enterprise Edition 的一项功能是将事件表与数据库关联。
确保您使用的角色具有 所需权限。
通过在对象上执行 ALTER <object> 命令,将 EVENT_TABLE 参数设置为事件表的名称。
设置此参数后,系统会将指定事件表的数据收集范围限定在所设置的对象内。
例如,要将事件表与数据库关联,请使用 ALTER DATABASE,如以下示例所示:
ALTER DATABASE my_database SET EVENT_TABLE = my_database.my_schema.my_events;
在本例中,根据您如何 指定遥测级别,Snowflake 会捕获过程和
telemetry_database.telemetry_schema.my_events
事件表中my_database
中的 UDFs 的遥测数据。
受支持对象¶
下表列出了可以关联事件的对象类型,以及完成关联所需的权限。
对象 |
所需权限 |
收集数据的对象范围 |
---|---|---|
账户 |
|
账户中的过程和 UDFs。使用此选项可设置最广泛的范围。 |
数据库 |
|
指定数据库中的过程和 UDFs。 |
事件表的使用遵循优先级顺序,以确定哪个事件表用于收集某个对象的遥测数据。在该优先级顺序中,与数据库关联的事件表优先于与账户关联的事件表。
账户 » 数据库
换句话说,如果您的事件表同时与您的账户和数据库 my_database
相关联,那么由 my_database
中的对象生成的遥测数据将被收集到数据库的事件表中。对于账户中 没有 关联事件表的其他数据库,遥测数据将会被收集到与账户关联的事件表中。
设置账户的事件表¶
备注
要执行此命令,必须使用 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;
设置数据库的事件表¶
要将数据库 my_database
中的架构 my_schema
中名为 my_events
的事件表设置为数据库 my_database
的活动事件表,请执行以下语句:
ALTER DATABASE my_database SET EVENT_TABLE = my_database.my_schema.my_events;
要取消事件表与数据库的关联,请执行 ALTER DATABASE 命令并取消设置 EVENT_TABLE 参数。例如:
ALTER DATABASE my_database UNSET EVENT_TABLE;
您可以使用以下 SHOW PARAMETERS 命令确认 EVENT_TABLE 值:
SHOW PARAMETERS LIKE 'event_table' IN DATABASE my_database;