关于监控动态表

Snowsight 和 SQL 都可用于查看动态表信息。以下各部分介绍用于监控和查看动态表信息的不同方法。

任务

描述

使用 Snowsight 监控刷新

监控动态表刷新。

使用 Snowsight 检查动态表的图

检查动态表图。

执行 SQL 语句以监控动态表

使用 SQL 检查动态表。

查看动态表刷新模式

查看动态表刷新模式

使用 Snowsight 监控刷新

  • 若要确定刷新是否遇到错误,请在 动态表详细信息页面 上选择 Refresh History 选项卡。

    选项卡顶部显示的信息包括:

    • 动态表最近更新的日期和时间

    • 动态表的目标滞后时间

    • 动态表在给定时间间隔内的最长实际滞后时间

    该选项卡还显示一个包含刷新历史记录的表。对于历史记录中的每次刷新,该表将显示以下信息:

    • 评估刷新时的事务时间戳

      (这可能略早于刷新开始的实际时间。)

    • 刷新完成所花费的时间

    • 目标滞后和刷新提交前达到的最大滞后

    • 刷新状态

使用 Snowsight 检查动态表的图

在 Snowsight 中,您可以查看有向无环图 (DAG)。您可以使用此图来确定给定的动态表所依赖的表。例如,您可以:

  • 确定动态表从何处检索数据。

  • 确定动态表的上游依赖项。

  • 确定可能受动态表更改影响的下游依赖项。

要检查包含动态表的图,请执行以下操作:

  1. 动态表详细信息页面 上,选择 Graph 选项卡。

    这将显示包含所选动态表节点的图。右侧 Details 窗格显示有关所选表或动态表的信息。

  2. 若要在图中显示不同项目的详细信息,请选择相应项目。

  3. 若要查看图中表的完整详细信息,请将鼠标悬停在表的节点上,然后选择节点右上角的 Go to Dynamic Table PageGo to Table Page

    打开图中表的详细信息页面。
  4. 若要使用最新更改更新显示的图和信息,请选择图上方栏中的刷新按钮。

    刷新图的显示。

下图显示了 Graph 选项卡和 Details 窗格。

动态表的图

Details 窗格中:

  • 显示的常规基表信息包括:

    • 拥有该表的角色和该表的创建日期

    • 表中的行数

    • 表的大小

  • 显示的动态表信息包括:

    • 拥有动态表的角色和创建动态表的日期

    • 刷新模式

    • 动态表的仓库

    • 目标滞后

    • 平均实际滞后

    • 最大实际滞后

设置新数据警报以监控动态表刷新

动态表刷新时,您可以将 Snowflake 配置为记录一个事件,该事件提供有关刷新操作状态的信息。该事件记录在与动态表关联的 活动事件表 中。

例如,假设 已将事件表与数据库关联。该数据库中的动态表刷新时,Snowflake 会将事件记录到该事件表中。

您可以设置 有新数据时发出警报,以监控事件表。您可以将警报配置为刷新失败时 发送通知

以下部分介绍如何设置事件日志记录以捕获事件、如何设置警报,以及如何解释事件表中记录的事件:

备注

记录动态表的事件会产生费用。请参阅 遥测数据收集成本

设置要捕获的事件的严重性级别

备注

如果您未设置严重性级别,则不会捕获任何事件。

要设置要记录到事件表的动态表事件,请 设置您要在时间表中捕获的事件的严重性级别。事件在以下级别捕获:

  • ERROR:刷新失败事件。

  • WARN:刷新上游动态表失败和刷新失败事件。

  • INFO:成功刷新事件、上游动态表刷新失败和刷新失败事件。

要设置级别,请为账户或对象设置 LOG_LEVEL 参数。您可以为以下内容设置级别:

  • 账户中的所有对象。

  • 数据库或架构中的所有对象。

  • 特定的动态表。

例如:

  • 要捕获账户中所有对象的 ERROR 级事件和消息,请执行 ALTER ACCOUNT SET LOG_LEVEL

    ALTER ACCOUNT SET LOG_LEVEL = ERROR;
    
    Copy

    请注意,此级别会影响账户中所有类型的对象,包括 UDFs、存储过程、动态表和任务。

  • 要捕获数据库 my_db 中所有对象的 INFO 级事件和消息,请执行 ALTER DATABASE ...SET LOG_LEVEL

    ALTER DATABASE my_db SET LOG_LEVEL = INFO;
    
    Copy

    与在账户上设置级别的情况类似,在数据库上设置级别会影响数据库中所有类型的对象,包括 UDFs、存储过程、动态表和任务。

  • 要捕获动态表 my_dynamic_table 的 WARN 级事件,请执行 ALTER DYNAMIC TABLE ... SET LOG_LEVEL

    ALTER DYNAMIC TABLE my_dynamic_table SET LOG_LEVEL = WARN;
    
    Copy

设置新数据警报

设置日志记录事件的严重性级别后,您可以设置新数据警报,以监控事件表中是否有指示动态表刷新失败的新事件。在事件表中插入新行并满足警报中指定的条件时,将触发新数据警报。

备注

要创建新数据警报,您必须使用已被授予查询事件表所需权限的角色。

在警报条件中,要查询动态表事件,请选择 resource_attributes:"snow.executable.type" = 'DYNAMIC_TABLE' 的行。要缩小事件列表的范围,您可以筛选以下列:

  • 要将结果限制为特定数据库中的动态表,请使用 resource_attributes:"snow.database.name"

  • 要返回因动态表错误而刷新失败的事件,请使用 value:state = 'FAILED'

  • 要返回因上游动态表错误而刷新失败的事件,请使用 value:state = 'UPSTREAM_FAILURE'

有关为动态表事件记录的值的信息,请参阅 为动态表事件记录的信息

例如,以下语句会创建新数据警报,在数据库 my_db 中动态表刷新失败时执行操作。该示例假定:

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;
Copy

为动态表事件记录的信息

当动态表刷新时,事件将记录到事件表中。以下各章节介绍表示事件的事件表行:

事件表列值

当动态表刷新时,将向事件表中插入具有以下值的行。

备注

如果列未在下面列出,则事件的列值为 NULL。

数据类型

描述

timestamp

TIMESTAMP_NTZ

事件创建时的 UTC 时间戳。

observed_timestamp

TIMESTAMP_NTZ

用于日志的 UTC 时间。目前,这与 timestamp 列中的值相同。

resource_attributes

OBJECT

属性,标识已刷新的动态表。

record_type

STRING

事件类型,即动态表刷新的 EVENT

record

OBJECT

关于动态表刷新状态的 详细信息

value

VARIANT

动态表刷新的状态,如果刷新失败,则为失败的错误消息。

resource_attributes 列中的键值对

resource_attributes 列包含具有以下键值对的 OBJECT 值:

属性名称

属性类型

描述

示例

snow.database.id

INTEGER

包含动态表的数据库的内部/系统生成的标识符。

12345

snow.database.name

VARCHAR

包含动态表的数据库的名称。

MY_DATABASE

snow.executable.id

INTEGER

已刷新的动态表的内部/系统生成的标识符。

12345

snow.executable.name

VARCHAR

已刷新的动态表的名称。

MY_DYNAMIC_TABLE

snow.executable.type

VARCHAR

对象的类型。值为动态表事件的 DYNAMIC_TABLE

DYNAMIC_TABLE

snow.owner.id

INTEGER

具有动态表 OWNERSHIP 权限的角色的内部/系统生成的标识符。

12345

snow.owner.name

VARCHAR

具有动态表 OWNERSHIP 权限的角色的名称。

MY_ROLE

snow.owner.type

VARCHAR

拥有对象的角色类型,例如 ROLE. 如果 Snowflake Native App 拥有该对象,则该值为 APPLICATION. 如果您删除该对象,则 Snowflake 会返回 NULL,原因是删除的对象不具有所有者角色。

ROLE

snow.query.id

VARCHAR

刷新动态表的查询的 ID。

01ba7614-0107-e56c-0000-a995024f304a

snow.schema.id

INTEGER

包含动态表的架构的内部/系统生成的标识符。

12345

snow.schema.name

VARCHAR

包含动态表的架构的名称。

MY_SCHEMA

snow.warehouse.id

INTEGER

用于刷新动态表的仓库的内部/系统生成的标识符。

12345

snow.warehouse.name

VARCHAR

用于刷新动态表的仓库的名称。

MY_WAREHOUSE

record 列中的键值对

record 列包含具有以下键值对的 OBJECT 值:

类型

描述

示例

name

VARCHAR

事件的名称。值为动态表刷新的 refresh_status

refresh_status

severity_text

VARCHAR

事件的严重性级别,为以下值之一:

  • INFO:刷新成功。

  • ERROR:刷新失败。

  • WARN:上游动态表刷新失败。

INFO

value 列中的键值对

value 列包含具有以下键值对的 VARIANT 值:

类型

描述

示例

state

VARCHAR

刷新状态,为以下值之一:

  • SUCCEEDED:刷新成功。

  • ERROR:刷新失败。

  • UPSTREAM_FAILURE:由于无法刷新此动态表所依赖的动态表,刷新失败。

SUCCEEDED

message

VARCHAR

如果 state 中的值为 ERROR,则此列包含错误消息。

SQL compilation error:\nFailure during expansion of view 'MY_DYNAMIC_TABLE': SQL compilation error:\nObject 'MY_DB.MY_SCHEMA.MY_BASE_TABLE' does not exist or not authorized.

执行 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;
Copy
+-------------------------+------------------+--------------------------------------+---------------------------------------------------------------------------------+
| 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;
Copy
+-------------------------+-----------------+-------------------------+-------+----------+-------------------------------------------------+-------+------------------+-------------+-----------------------------+-------------------+-------------------------------+-----------+
| 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;
    
    Copy
语言: 中文