关于监控动态表¶
Snowsight 和 SQL 都可用于查看动态表信息。以下各部分介绍用于监控和查看动态表信息的不同方法。
任务 |
描述 |
---|---|
监控动态表刷新。 |
|
检查动态表图。 |
|
使用 SQL 检查动态表。 |
|
查看动态表刷新模式 |
使用 Snowsight 监控刷新¶
若要确定刷新是否遇到错误,请在 动态表详细信息页面 上选择 Refresh History 选项卡。
选项卡顶部显示的信息包括:
动态表最近更新的日期和时间
动态表的目标滞后时间
动态表在给定时间间隔内的最长实际滞后时间
该选项卡还显示一个包含刷新历史记录的表。对于历史记录中的每次刷新,该表将显示以下信息:
评估刷新时的事务时间戳
(这可能略早于刷新开始的实际时间。)
刷新完成所花费的时间
目标滞后和刷新提交前达到的最大滞后
刷新状态
使用 Snowsight 检查动态表的图¶
在 Snowsight 中,您可以查看有向无环图 (DAG)。您可以使用此图来确定给定的动态表所依赖的表。例如,您可以:
确定动态表从何处检索数据。
确定动态表的上游依赖项。
确定可能受动态表更改影响的下游依赖项。
要检查包含动态表的图,请执行以下操作:
在 动态表详细信息页面 上,选择 Graph 选项卡。
这将显示包含所选动态表节点的图。右侧 Details 窗格显示有关所选表或动态表的信息。
若要在图中显示不同项目的详细信息,请选择相应项目。
若要查看图中表的完整详细信息,请将鼠标悬停在表的节点上,然后选择节点右上角的 Go to Dynamic Table Page 或 Go to Table Page。
若要使用最新更改更新显示的图和信息,请选择图上方栏中的刷新按钮。
下图显示了 Graph 选项卡和 Details 窗格。
![]()
在 Details 窗格中:
显示的常规基表信息包括:
拥有该表的角色和该表的创建日期
表中的行数
表的大小
显示的动态表信息包括:
拥有动态表的角色和创建动态表的日期
刷新模式
动态表的仓库
目标滞后
平均实际滞后
最大实际滞后
设置新数据警报以监控动态表刷新¶
动态表刷新时,您可以将 Snowflake 配置为记录一个事件,该事件提供有关刷新操作状态的信息。该事件记录在与动态表关联的 活动事件表 中。
例如,假设 已将事件表与数据库关联。该数据库中的动态表刷新时,Snowflake 会将事件记录到该事件表中。
您可以设置 有新数据时发出警报,以监控事件表。您可以将警报配置为刷新失败时 发送通知。
以下部分介绍如何设置事件日志记录以捕获事件、如何设置警报,以及如何解释事件表中记录的事件:
备注
记录动态表的事件会产生费用。请参阅 遥测数据收集成本。
设置要捕获的事件的严重性级别¶
备注
如果您未设置严重性级别,则不会捕获任何事件。
要设置要记录到事件表的动态表事件,请 设置您要在时间表中捕获的事件的严重性级别。事件在以下级别捕获:
ERROR
:刷新失败事件。WARN
:刷新上游动态表失败和刷新失败事件。INFO
:成功刷新事件、上游动态表刷新失败和刷新失败事件。
要设置级别,请为账户或对象设置 LOG_LEVEL 参数。您可以为以下内容设置级别:
账户中的所有对象。
数据库或架构中的所有对象。
特定的动态表。
例如:
要捕获账户中所有对象的 ERROR 级事件和消息,请执行 ALTER ACCOUNT SET LOG_LEVEL:
ALTER ACCOUNT SET LOG_LEVEL = ERROR;
请注意,此级别会影响账户中所有类型的对象,包括 UDFs、存储过程、动态表和任务。
要捕获数据库
my_db
中所有对象的 INFO 级事件和消息,请执行 ALTER DATABASE ...SET LOG_LEVEL:ALTER DATABASE my_db SET LOG_LEVEL = INFO;
与在账户上设置级别的情况类似,在数据库上设置级别会影响数据库中所有类型的对象,包括 UDFs、存储过程、动态表和任务。
要捕获动态表
my_dynamic_table
的 WARN 级事件,请执行 ALTER DYNAMIC TABLE ... SET LOG_LEVEL:ALTER DYNAMIC TABLE my_dynamic_table SET LOG_LEVEL = WARN;
设置新数据警报¶
设置日志记录事件的严重性级别后,您可以设置新数据警报,以监控事件表中是否有指示动态表刷新失败的新事件。在事件表中插入新行并满足警报中指定的条件时,将触发新数据警报。
备注
要创建新数据警报,您必须使用已被授予查询事件表所需权限的角色。
如果警报条件查询默认事件表 (SNOWFLAKE.TELEMETRY.EVENTS)或预定义视图(SNOWFLAKE.TELEMETRY.EVENTS_VIEW 视图),请参阅 访问默认事件表和 EVENTS_VIEW 的角色。
要管理 EVENTS_VIEW 视图的访问权限,请参阅 管理对 EVENTS_VIEW 视图的访问权限。
如果警报条件查询自定义事件表,请参阅 事件表的访问控制权限。
要管理自定义事件表的访问权限,请参阅 管理对事件表数据的访问。
在警报条件中,要查询动态表事件,请选择 resource_attributes:"snow.executable.type" = 'DYNAMIC_TABLE'
的行。要缩小事件列表的范围,您可以筛选以下列:
要将结果限制为特定数据库中的动态表,请使用
resource_attributes:"snow.database.name"
。要返回因动态表错误而刷新失败的事件,请使用
value:state = 'FAILED'
。要返回因上游动态表错误而刷新失败的事件,请使用
value:state = 'UPSTREAM_FAILURE'
。
有关为动态表事件记录的值的信息,请参阅 为动态表事件记录的信息。
例如,以下语句会创建新数据警报,在数据库 my_db
中动态表刷新失败时执行操作。该示例假定:
您的活动事件表是 默认事件表 (SNOWFLAKE.TELEMETRY.EVENTS)。
您已为该 Slack 通道 设置 Webhook 通知集成。
CREATE ALERT my_alert_on_dt_refreshes
IF( EXISTS(
SELECT * FROM SNOWFLAKE.TELEMETRY.EVENT_TABLE
WHERE resource_attributes:"snow.executable.type" = 'dynamic_table'
AND resource_attributes:"snow.database.name" = 'my_db'
AND record_attributes:"event.name" = 'refresh.status'
AND record:"severity_text" = 'ERROR'
AND value:"state" = 'FAILED'))
THEN
BEGIN
LET result_str VARCHAR;
(SELECT ARRAY_TO_STRING(ARRAY_ARG(name)::ARRAY, ',') INTO :result_str
FROM (
SELECT resource_attributes:"snow.executable.name"::VARCHAR name
FROM TABLE(RESULT_SCAN(SNOWFLAKE.ALERT.GET_CONDITION_QUERY_UUID()))
LIMIT 10
)
);
CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
SNOWFLAKE.NOTIFICATION.TEXT_PLAIN(:result_str),
'{"my_slack_integration": {}}'
);
END;
为动态表事件记录的信息¶
当动态表刷新时,事件将记录到事件表中。以下各章节介绍表示事件的事件表行:
事件表列值¶
当动态表刷新时,将向事件表中插入具有以下值的行。
备注
如果列未在下面列出,则事件的列值为 NULL。
列 |
数据类型 |
描述 |
---|---|---|
|
TIMESTAMP_NTZ |
事件创建时的 UTC 时间戳。 |
|
TIMESTAMP_NTZ |
用于日志的 UTC 时间。目前,这与 |
|
OBJECT |
属性,标识已刷新的动态表。 |
|
STRING |
事件类型,即动态表刷新的 |
|
OBJECT |
关于动态表刷新状态的 详细信息。 |
|
VARIANT |
动态表刷新的状态,如果刷新失败,则为失败的错误消息。 |
resource_attributes
列中的键值对¶
resource_attributes
列包含具有以下键值对的 OBJECT 值:
属性名称 |
属性类型 |
描述 |
示例 |
---|---|---|---|
|
INTEGER |
包含动态表的数据库的内部/系统生成的标识符。 |
|
|
VARCHAR |
包含动态表的数据库的名称。 |
|
|
INTEGER |
已刷新的动态表的内部/系统生成的标识符。 |
|
|
VARCHAR |
已刷新的动态表的名称。 |
|
|
VARCHAR |
对象的类型。值为动态表事件的 |
|
|
INTEGER |
具有动态表 OWNERSHIP 权限的角色的内部/系统生成的标识符。 |
|
|
VARCHAR |
具有动态表 OWNERSHIP 权限的角色的名称。 |
|
|
VARCHAR |
拥有对象的角色类型,例如 |
|
|
VARCHAR |
刷新动态表的查询的 ID。 |
|
|
INTEGER |
包含动态表的架构的内部/系统生成的标识符。 |
|
|
VARCHAR |
包含动态表的架构的名称。 |
|
|
INTEGER |
用于刷新动态表的仓库的内部/系统生成的标识符。 |
|
|
VARCHAR |
用于刷新动态表的仓库的名称。 |
|
record
列中的键值对¶
record
列包含具有以下键值对的 OBJECT 值:
键 |
类型 |
描述 |
示例 |
---|---|---|---|
|
VARCHAR |
事件的名称。值为动态表刷新的 |
|
|
VARCHAR |
事件的严重性级别,为以下值之一:
|
|
value
列中的键值对¶
value
列包含具有以下键值对的 VARIANT 值:
键 |
类型 |
描述 |
示例 |
---|---|---|---|
|
VARCHAR |
刷新状态,为以下值之一:
|
|
|
VARCHAR |
如果 |
|
执行 SQL 语句以监控动态表¶
要监控动态表刷新,您可以查询活动事件表中记录的事件,并调用动态表的表函数。以下部分介绍如何使用 SQL 语句监控动态表:
查询事件表以监控刷新¶
如前所述,刷新动态表时,事件表中会记录一个事件,以指示刷新是成功还是失败。您可以在事件表中查询这些事件。
有关查询事件表时需要使用的角色,以及用于筛选结果的条件的信息,请参阅 设置新数据警报。
例如,要获取时间戳、动态表名、查询 ID,以及数据库 my_db
中动态表错误的错误消息:
SELECT
timestamp,
resource_attributes:"snow.executable.name"::VARCHAR AS dt_name,
resource_attributes:"snow.query.id"::VARCHAR AS query_id,
value:message::VARCHAR AS error
FROM my_event_table
WHERE
resource_attributes:"snow.executable.type" = 'DYNAMIC_TABLE' AND
resource_attributes:"snow.database.name" = 'MY_DB' AND
value:state = 'FAILED'
ORDER BY timestamp DESC;
+-------------------------+------------------+--------------------------------------+---------------------------------------------------------------------------------+
| TIMESTAMP | DT_NAME | QUERY_ID | ERROR |
|-------------------------+------------------+--------------------------------------+---------------------------------------------------------------------------------|
| 2025-02-17 21:40:45.444 | MY_DYNAMIC_TABLE | 01ba7614-0107-e56c-0000-a995024f304a | SQL compilation error: |
| | | | Failure during expansion of view 'MY_DYNAMIC_TABLE': SQL compilation error: |
| | | | Object 'MY_DB.MY_SCHEMA.MY_BASE_TABLE' does not exist or not authorized. |
+-------------------------+------------------+--------------------------------------+---------------------------------------------------------------------------------+
以下示例检索架构 my_schema
中动态表的上游错误的所有列:
SELECT *
FROM my_event_table
WHERE
resource_attributes:"snow.executable.type" = 'DYNAMIC_TABLE' AND
resource_attributes:"snow.schema.name" = 'MY_SCHEMA' AND
value:state = 'UPSTREAM_FAILURE'
ORDER BY timestamp DESC;
+-------------------------+-----------------+-------------------------+-------+----------+-------------------------------------------------+-------+------------------+-------------+-----------------------------+-------------------+-------------------------------+-----------+
| TIMESTAMP | START_TIMESTAMP | OBSERVED_TIMESTAMP | TRACE | RESOURCE | RESOURCE_ATTRIBUTES | SCOPE | SCOPE_ATTRIBUTES | RECORD_TYPE | RECORD | RECORD_ATTRIBUTES | VALUE | EXEMPLARS |
|-------------------------+-----------------+-------------------------+-------+----------+-------------------------------------------------+-------+------------------+-------------+-----------------------------+-------------------+-------------------------------+-----------|
| 2025-02-17 21:40:45.486 | NULL | 2025-02-17 21:40:45.486 | NULL | NULL | { | NULL | NULL | EVENT | { | NULL | { | NULL |
| | | | | | "snow.database.id": 49, | | | | "name": "refresh.status", | | "state": "UPSTREAM_FAILURE" | |
| | | | | | "snow.database.name": "MY_DB", | | | | "severity_text": "WARN" | | } | |
| | | | | | "snow.executable.id": 487426, | | | | } | | | |
| | | | | | "snow.executable.name": "MY_DYNAMIC_TABLE_2", | | | | | | | |
| | | | | | "snow.executable.type": "DYNAMIC_TABLE", | | | | | | | |
| | | | | | "snow.owner.id": 2601, | | | | | | | |
| | | | | | "snow.owner.name": "DATA_ADMIN", | | | | | | | |
| | | | | | "snow.owner.type": "ROLE", | | | | | | | |
| | | | | | "snow.schema.id": 411, | | | | | | | |
| | | | | | "snow.schema.name": "MY_SCHEMA" | | | | | | | |
| | | | | | } | | | | | | | |
+-------------------------+-----------------+-------------------------+-------+----------+-------------------------------------------------+-------+------------------+-------------+-----------------------------+-------------------+-------------------------------+-----------+
调用动态表的表函数¶
若要确定刷新是否出现问题,请使用以下 INFORMATION_SCHEMA 表函数:
DYNAMIC_TABLES 提供有关动态表的每次已完成和正在运行的刷新的信息。
DYNAMIC_TABLE_REFRESH_HISTORY 提供账户中一个或多个动态表的刷新历史记录。
DYNAMIC_TABLE_GRAPH_HISTORY 提供每个动态表的历史记录、其属性及其与其他表和动态表的依赖项。
您可以使用此表函数获取给定时间点动态表的依赖关系树的快照。
输出还反映了随时间推移动态表属性所做的更改。每行表示一个动态表和一组特定的属性。如果更改动态表的属性(例如,目标滞后),则该函数将为该更新的属性集生成一行新的输出。
若要识别有错误的刷新,请调用 DYNAMIC_TABLE_REFRESH_HISTORY 函数,并传入实参 ERROR_ONLY => TRUE。
例如,如果要检查
mydb
数据库和myschema
架构内动态表中的刷新错误,请执行以下语句:SELECT name, state, state_code, state_message, query_id, data_timestamp, refresh_start_time, refresh_end_time FROM TABLE(INFORMATION_SCHEMA.DYNAMIC_TABLE_REFRESH_HISTORY(NAME_PREFIX => 'MYDB.MYSCHEMA.', ERROR_ONLY => TRUE)) ORDER BY name, data_timestamp;