事件表概述

当您的 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
Copy
EVENTS_VIEWER:

具有对 EVENTS_VIEW 视图 执行 SELECT 语句的权限的角色。

EVENTS_ADMIN:

具有以下权限的角色:

管理对 EVENTS_VIEW 视图的访问权限

您可以使用 行访问策略 管理对 EVENTS_VIEW 视图中数据的访问。Snowflake 提供了存储过程,可用于向 EVENT_VIEW 视图添加和移除行访问策略。

备注

您必须拥有 EVENTS_ADMIN 角色 才能执行这些过程。

在 EVENT_VIEW 视图上使用行访问策略是一项 Enterprise Edition 功能。

使用自定义事件表

要创建新的事件表,请执行 CREATE EVENT TABLE 命令并指定事件表的名称。

备注

如果不创建事件表,Snowflake 会使用默认事件表来收集遥测数据。

  1. 通过执行 CREATE EVENT TABLE 命令:ref:创建事件表 <label-logging_event_table_custom_create>,为事件表指定名称。

  2. 通过在对象上执行 ALTER <object> 命令,将 EVENT_TABLE 参数设置为事件表的名称,将事件表与对象关联

    这会将事件表捕获的数据范围设定为与该表关联的对象。

创建事件表

要创建事件表,请执行 CREATE EVENT TABLE 命令。

创建事件表时,不要指定表中的列。事件表已具有一组预定义列,如 事件表列 中所述。

  1. 确保您使用的角色具有 CREATE EVENT TABLE 权限

  2. 通过执行 CREATE EVENT TABLE 命令创建事件表,为事件表指定名称。

    您可以使用事件表名称 将表与对象(如数据库)关联

    例如,要创建名为 my_events 的事件表,请执行以下语句:

    CREATE EVENT TABLE my_database.my_schema.my_events;
    
    Copy

备注

当前不支持复制事件表。复制期间将跳过主数据库中包含的任何事件表。

将事件表与对象关联

要指定活动事件表的对象,请对该对象执行 ALTER <object> 命令。

Enterprise Edition 的一项功能是将事件表与数据库关联。

  1. 确保您使用的角色具有 所需权限

  2. 通过在对象上执行 ALTER <object> 命令,将 EVENT_TABLE 参数设置为事件表的名称。

    设置此参数后,系统会将指定事件表的数据收集范围限定在所设置的对象内。

    例如,要将事件表与数据库关联,请使用 ALTER DATABASE,如以下示例所示:

    ALTER DATABASE my_database SET EVENT_TABLE = my_database.my_schema.my_events;
    
    Copy

    在本例中,根据您如何 指定遥测级别,Snowflake 会捕获过程和 telemetry_database.telemetry_schema.my_events 事件表中 my_database 中的 UDFs 的遥测数据。

受支持对象

下表列出了可以关联事件的对象类型,以及完成关联所需的权限。

对象

所需权限

收集数据的对象范围

账户

账户中的过程和 UDFs。使用此选项可设置最广泛的范围。

数据库

指定数据库中的过程和 UDFs。

事件表的使用遵循优先级顺序,以确定哪个事件表用于收集某个对象的遥测数据。在该优先级顺序中,与数据库关联的事件表优先于与账户关联的事件表。

  • 账户 » 数据库

换句话说,如果您的事件表同时与您的账户和数据库 my_database 相关联,那么由 my_database 中的对象生成的遥测数据将被收集到数据库的事件表中。对于账户中 没有 关联事件表的其他数据库,遥测数据将会被收集到与账户关联的事件表中。

设置账户的事件表

备注

要执行此命令,必须使用 ACCOUNTADMIN 角色。

此外,您还必须拥有以下 两项 权限:

有关执行 ALTER ACCOUNT 所需权限的更多信息,请参阅 有关 ALTER ACCOUNT 命令的文档

例如,要将数据库 my_database 中的架构 my_schema 中名为 my_events 的事件表设置为账户的活动事件表,请执行以下语句:

ALTER ACCOUNT SET EVENT_TABLE = my_database.my_schema.my_events;
Copy

如上所示,必须指定事件表的 完全限定名称

要取消事件表与账户的关联,请执行 ALTER ACCOUNT 命令并取消设置 EVENT_TABLE 参数。例如:

ALTER ACCOUNT UNSET EVENT_TABLE;
Copy

您可以使用以下 SHOW PARAMETERS 命令确认 EVENT_TABLE 值:

SHOW PARAMETERS LIKE 'event_table' IN ACCOUNT;
Copy

设置数据库的事件表

要将数据库 my_database 中的架构 my_schema 中名为 my_events 的事件表设置为数据库 my_database 的活动事件表,请执行以下语句:

ALTER DATABASE my_database SET EVENT_TABLE = my_database.my_schema.my_events;
Copy

要取消事件表与数据库的关联,请执行 ALTER DATABASE 命令并取消设置 EVENT_TABLE 参数。例如:

ALTER DATABASE my_database UNSET EVENT_TABLE;
Copy

您可以使用以下 SHOW PARAMETERS 命令确认 EVENT_TABLE 值:

SHOW PARAMETERS LIKE 'event_table' IN DATABASE my_database;
Copy
语言: 中文