监控动态表¶
本主题描述了查看和了解管道中动态表的方式:
部分 |
描述 |
---|---|
列出架构中的动态表并查看有关动态表的信息。 |
|
查看连接到动态表的表图形。 |
|
使用 SQL 表函数监控动态表。 |
|
查看动态表的刷新状态。 |
列出动态表或查看有关特定列的信息¶
要列出架构中的动态表并查看有关这些动态表的信息,您可以使用下面的 SQL 命令或 Snowsight,只要您使用的角色对动态表具有 MONITOR 权限。
有关更多信息,请参阅 查看动态表元数据的权限。
使用 SHOW DYNAMIC TABLES 命令可列出当前数据库中的动态表(如果当前未使用数据库,则列出账户中的动态表)。
例如,要列出数据库 mydb
和架构 myschema
中名称以 product_
开头的动态表,请执行以下 SQL 语句:
SHOW DYNAMIC TABLES LIKE 'product_%' IN SCHEMA mydb.myschema;
+-------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| created_on | name | database_name | schema_name | cluster_by | rows | bytes | owner | target_lag | refresh_mode | refresh_mode_reason | warehouse | comment | text | automatic_clustering | scheduling_state | last_suspended_on | is_clone | is_replica | is_iceberg | data_timestamp | owner_role_type |
|-------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|2025-01-01 16:32:28 +0000 | product_dt | my_db | my_schema | | 2 | 2048 | ORGADMIN | DOWNSTREAM | INCREMENTAL | null | mywh | | create or replace dynamic table | OFF | ACTIVE | null | false | false | false |2025-01-01 16:32:28 +0000 | ROLE |
| product dt ... | | |
+-------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
要输出有关动态表中列的信息,请使用 DESCRIBE DYNAMIC TABLE 命令。
例如,要列出 my_dynamic_table
中的列,请执行以下 SQL 语句:
DESC DYNAMIC TABLE my_dynamic_table;
+-------------------+--------------------------------------------------------------------------------------------------------------------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name | privacy domain |
|-------------------+------------------------------------------------------------------------------------------------------------------------|
| AMOUNT | NUMBER(38,0) | COLUMN | Y | null | N | N | null | null | null | null | null | | |
+-------------------+------------------------------------------------------------------------------------------------------------------------+
动态表也包含在 TABLES 视图 的结果中。
要列出架构中的动态表并查看有关特定动态表的信息,请执行以下操作:
登录 Snowsight。
选择 Data » Databases。
选择数据库和架构。
选择 Dynamic Tables 选项卡或展开数据库对象资源管理器中的 Dynamic Tables。
要查看有关特定动态表的信息,请在 Dynamic Tables 选项卡中或在数据库对象资源管理器中的动态表列表中选择动态表。
此页面中的选项卡可提供有关所选动态表的以下详细信息:
Table Details:显示有关动态表的基本信息,包括:
动态表的计划状态。
动态表的上次刷新状态。对于失败的刷新,如果将鼠标悬停在状态上方,则可以查看有关错误的更多信息。
动态表的当前滞后和目标滞后。
是否使用 增量刷新或完全刷新 来更新表。
动态表的定义。
动态表的标签。
为使用动态表而授予的权限。
Columns:有关动态表中列的信息。
Data Preview:动态表中最多 100 行数据的预览。
Graph:显示包含此动态表的 有向无环图 (DAG)。
Refresh History:显示刷新历史记录和滞后指标。
查看连接到动态表的表图形¶
查看依赖项对于排除动态表链故障特别有用。在 Snowsight 中,您可以使用沿袭图可视化给定动态表所依赖的动态表。例如,您可以确定以下内容:
动态表从中提取数据的上游依赖项。
可能受到动态表更改影响的下游依赖项。

依赖项可能会影响刷新性能。例如,假设动态表的上游表在计划刷新之前添加了大量数据负载。动态表将等待它完成刷新,从而导致其无法满足目标滞后要求。在沿袭图中,您会看到标记为“正在执行”的输入表,这表示存在延迟。
要查看特定动态表的图表,请执行以下操作:
登录 Snowsight。
在导航菜单中,转到 Monitoring » Dynamic Tables。
选择动态表。默认情况下显示 Graph 视图。这将显示带有选定动态表节点的图形。右侧的 Details 窗格显示有关其滞后指标和配置的信息。
要在图表中显示不同表的详细信息,请选择相应表。
要更新图表,请选择图表上方栏中的刷新按钮。

如果由于 UPSTREAM_FAILED 错误代码导致刷新失败,则可以使用图表来可视化哪个上游表导致了失败。

要查看图表中表格的完整详细信息,请参阅 列出动态表或查看有关特定列的信息。
使用 SQL 表函数监控动态表¶
使用以下 INFORMATION_SCHEMA 表函数监控动态表:
DYNAMIC_TABLES:返回有关动态表的元数据,其中包括当前时间七天内的聚合滞后指标和最近刷新的状态。
DYNAMIC_TABLE_REFRESH_HISTORY:返回有关动态表的每次已完成和正在进行的刷新的信息,包括刷新状态和触发器以及目标滞后。
DYNAMIC_TABLE_REFRESH_HISTORY 视图:此 Account Usage 视图还显示动态表刷新历史记录的信息。它对于调试时间超过 DYNAMIC_TABLE_REFRESH_HISTORY 表函数的数据保留时间(七天)的问题很有用。
DYNAMIC_TABLE_GRAPH_HISTORY:返回提供每个动态表的历史记录、其属性及其与其他表和动态表的依赖项的信息。
您可以使用此表函数获取给定时间点动态表的依赖关系树的快照。
输出还反映了随时间推移动态表属性所做的更改。每行表示一个动态表和一组特定的属性。如果更改动态表的某个属性(例如,目标滞后),则该函数将返回最新的属性。
监控动态表的刷新状态¶
本节介绍如何查看所有动态表或特定动态表的刷新状态。
有关故障排除刷新,请参阅 动态表刷新跳过、缓慢或失败故障排除 和 诊断常见的动态表刷新问题。
监控所有动态表的刷新¶
您可以使用 Snowsight 或 DYNAMIC_TABLES 表函数来查看所有动态表的刷新状态。
登录 Snowsight。在导航菜单中,选择 Monitoring » Dynamic Tables。
您可以在此页面上查看所有动态表的状态和上次刷新状态。您还可以按数据库或架构进行筛选以缩小结果范围。

DYNAMIC_TABLES 提供有关账户中所有动态表的信息。
以下示例检索有关账户中所有动态表及其关联数据库和架构的状态和目标滞后的信息。
SELECT
name,
database_name,
schema_name,
scheduling_state,
target_lag_type,
target_lag_sec,
FROM
TABLE (
INFORMATION_SCHEMA.DYNAMIC_TABLES ()
)
ORDER BY
name;
+--------------------+------------------------------+--------------------------------------------------------------------------------------------------+-----------------+----------------+
| NAME | DATABASE_NAME | SCHEMA_NAME | SCHEDULING_STATE | TARGET_LAG_TYPE | TARGET_LAG_SEC |
|--------------------+------------------------------+--------------------------------------------------------------------------------------------------|-----------------+----------------+
| MY_DYNAMIC_TABLE_1 | MY_DB_1 | MY_SCHEMA_1 | { | | |
| | | | "reason_code": "UPSTREAM_SUSPENDED_DUE_TO_ERRORS", | | |
| | | | "reason_message": "The DT was suspended because an input DT had 5 consecutive refresh errors", | | |
| | | | "state": "SUSPENDED", | | |
| | | | "suspended_on": "2025-04-14 11:49:09.576 Z" | USER_DEFINED | 60 |
| | | | } | | |
| MY_DYNAMIC_TABLE_2 | MY_DB_2 | MY_SCHEMA_2 | null | | |
+--------------------+------------------------------+--------------------------------------------------------------------------------------------------+-----------------+----------------|
以下示例检索账户中所有动态表的状态及每个状态的相关信息,以便进行刷新。
-- latest_data_timestamp is the refresh timestamp associated with last successful refresh.
SELECT
name,
last_completed_refresh_state,
last_completed_refresh_state_code,
last_completed_refresh_state_message,
latest_data_timestamp,
time_within_target_lag_ratio,
maximum_lag_sec,
executing_refresh_query_id
FROM
TABLE (
INFORMATION_SCHEMA.DYNAMIC_TABLES ()
)
ORDER BY
name;
-- Both dynamic tables in the example below have a target lag of one minute.
+--------------------+------------------------------+-----------------------------------+-----------------------------------------------+-----------------------+------------------------------+-----------------+----------------------------+
| NAME | LAST_COMPLETED_REFRESH_STATE | LAST_COMPLETED_REFRESH_STATE_CODE | LAST_COMPLETED_REFRESH_STATE_MESSAGE | LATEST_DATA_TIMESTAMP | TIME_WITHIN_TARGET_LAG_RATIO | MAXIMUM_LAG_SEC | EXECUTING_REFRESH_QUERY_ID |
|--------------------+------------------------------+-----------------------------------+-----------------------------------------------|-----------------------+------------------------------+-----------------+----------------------------+
| MY_DYNAMIC_TABLE_1 | UPSTREAM_FAILED | UPSTREAM_FAILURE | Skipped refreshing because an input DT failed | 2025-04-12 09:00:48 | null | null | null |
| MY_DYNAMIC_TABLE_2 | SUCCEEDED | SUCCESS | null | 2025-04-12 09:01:36 | 0.999 | 125 | null |
+--------------------+------------------------------+-----------------------------------+-----------------------------------------------+-----------------------+------------------------------+-----------------+----------------------------+
监控特定动态表的所有刷新¶
您可以使用 Snowsight 或 DYNAMIC_TABLES_REFRESH_HISTORY 表函数来查看给定动态表的刷新历史记录。
登录 Snowsight。
在导航菜单中,选择 Monitoring » Dynamic Tables。
选择动态表,然后转到 Refresh History 选项卡。
此页面显示动态表的刷新历史记录,其中包括有关每次刷新的状态、持续时间和实际滞后时间以及每次刷新时更改的行数的信息。
它还显示动态表的滞后指标,其中包括目标滞后内的时间百分比以及给定间隔内最长的实际滞后时间。

要查看特定动态表的刷新历史记录,请使用 DYNAMIC_TABLE_REFRESH_HISTORY 表函数。
例如,如果要查看 my_db
数据库和 my_schema
架构中所有动态表的刷新历史记录,请执行以下语句:
SELECT
name,
data_timestamp,
state,
state_code,
state_message
FROM TABLE (INFORMATION_SCHEMA.DYNAMIC_TABLE_REFRESH_HISTORY (NAME_PREFIX => 'MY_DB.MY_SCHEMA')) ORDER BY data_timestamp desc;
+--------------------+---------------------+-----------+------------------------------+----------------------------------------------------------------+
| NAME | DATA_TIMESTAMP | STATE | STATE_CODE | STATE_MESSAGE |
|--------------------+---------------------+-----------+------------------------------+----------------------------------------------------------------|
| MY_DYNAMIC_TABLE_1 | 2025-04-12 09:01:36 | SKIPPED | SKIP_DUE_TO_UPSTREAM_FAILURE | Skipped refreshing because an input DT failed. |
| MY_DYNAMIC_TABLE_1 | 2025-04-12 09:00:48 | SUCCEEDED | | |
| MY_DYNAMIC_TABLE_1 | 2025-04-12 09:00:00 | FAILED | 100038 | Numeric value 'Good' is not recognized. |
| MY_DYNAMIC_TABLE_2 | 2025-04-12 09:01:36 | SUCCEEDED | | |
| MY_DYNAMIC_TABLE_2 | 2025-04-12 09:00:48 | FAILED | 091930 | SQL compilation error: Change tracking is not enabled or has |
| | | | | been missing for the time range requested on table 'MY_TABLE'. |
| MY_DYNAMIC_TABLE_2 | 2025-04-12 09:00:00 | CANCELLED | 002724 | Dynamic Table refresh job cancelled. |
+--------------------+---------------------+-----------+------------------------------+----------------------------------------------------------------+
要筛选出错的刷新,请传入实参 ERROR_ONLY => TRUE
。例如:
SELECT
name,
data_timestamp,
state,
state_code,
state_message
FROM TABLE (INFORMATION_SCHEMA.DYNAMIC_TABLE_REFRESH_HISTORY (NAME_PREFIX => 'MY_DB.MY_SCHEMA', ERROR_ONLY => TRUE));
+--------------------+---------------------+-----------+------------------------------+----------------------------------------------------------------+
| NAME | DATA_TIMESTAMP | STATE | STATE_CODE | STATE_MESSAGE |
|--------------------+---------------------+-----------+------------------------------+----------------------------------------------------------------|
| MY_DYNAMIC_TABLE_1 | 2025-04-12 09:00:00 | FAILED | 100038 | Numeric value 'Good' is not recognized. |
| MY_DYNAMIC_TABLE_2 | 2025-04-12 09:00:48 | FAILED | 091930 | SQL compilation error: Change tracking is not enabled or has |
| | | | | been missing for the time range requested on table 'MY_TABLE'. |
| MY_DYNAMIC_TABLE_2 | 2025-04-12 09:00:00 | CANCELLED | 002724 | Dynamic Table refresh job cancelled. |
+--------------------+---------------------+-----------+------------------------------+----------------------------------------------------------------+