動的テーブルをモニターする¶
このトピックでは、パイプラインの動的テーブルを表示し、理解する方法について説明します。
| セクション | 説明 | 
|---|---|
| スキーマ内の動的テーブルをリストし、それらの情報を表示します。 | |
| 動的テーブルに接続されたテーブルのグラフをご覧ください。 | |
| SQL テーブル関数を使用して、動的テーブルを監視します。 | |
| 動的テーブルの更新ステータスを表示します。 | 
動的なテーブルのリストや特定の列の情報の表示¶
スキーマ内の動的テーブルをリストし、それらの動的テーブルに関する情報を表示するには、動的テーブルに対して MONITOR 権限を持つロールを使用している限り、以下の SQL コマンドまたは Snowsight のいずれかを使用することができます。
詳細については、 動的テーブルのメタデータを表示する権限 をご参照ください。
現在のデータベース(現在データベースが使用されていない場合はアカウント)内の動的テーブルをリストするには、 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 にサインインします。 
- ナビゲーションメニューで Catalog » Database Explorer を選択します。 
- データベースとスキーマを選択します。 
- Dynamic Tables タブを選択するか、データベースオブジェクトエクスプローラーで Dynamic Tables を展開します。 
- 特定の動的テーブルの情報を表示するには、 Dynamic Tables タブの動的テーブル リストまたはデータベース オブジェクト エクスプローラーから動的テーブルを選択します。 
- このページのタブには、選択した動的テーブルに関する以下の詳細が表示されます。 - Table Details: 以下を含む動的テーブルの基本情報を表示します。 
 - 動的テーブルのスケジュール状態。 
- 動的テーブルの最後の更新ステータス。リフレッシュに失敗した場合、ステータスにカーソルを合わせると、エラーの詳細情報が表示されます。 
- 動的テーブルの現在とターゲットのラグ。 
- テーブルの更新に、 インクリメンタルリフレッシュもしくはフルリフレッシュ のどちらを使用するか。 
- 動的テーブルの定義。 
- 動的テーブルのタグ。 
- 動的テーブルを操作するために付与された権限。 
 
Columns: 動的テーブルの列に関する情報。
Data Preview: 動的テーブルにあるデータの最大100行のプレビュー。
Graph: この動的テーブルを含む 有向無巡回グラフ (DAG) を表示します。
Refresh History: リフレッシュの履歴とラグ・メトリクスを表示します。
動的テーブルに接続されたテーブルのグラフ表示¶
依存関係の表示は、動的テーブル・チェーンのトラブルシューティングに特に役立ちます。Snowsight では、系統グラフを使用して、ある動的テーブルがどの動的テーブルに依存しているかを視覚化できます。例えば、以下のような識別が可能です。
- 動的テーブルがデータを取得する上流の依存関係。 
- 動的テーブルの変更によって影響を受ける可能性のあるダウンストリームの依存関係。 
 
依存関係はリフレッシュパフォーマンスに影響を与えます。例えば、動的テーブルの上流テーブルに、リフレッシュ・スケジュールの直前に大容量のデータが追加されたとします。動的テーブルがリフレッシュを終えるまで待たされ、ターゲット・ラグを逃してしまいます。入力テーブルが "実行中 "と表示され、遅延していることがわかります。
特定の動的テーブルのグラフを表示するには、次のようにします。
- Snowsight にサインインします。 
- ナビゲーションメニューで Transformation » Dynamic tables を選択します。 
- 動的テーブルを選択します。デフォルトでは Graph が表示されます。動的テーブルのノードが選択されたグラフが表示されます。右側の Details ペインには、ラグ・メトリクスと構成に関する情報が表示されます。 
- グラフに別のテーブルの詳細を表示するには、そのテーブルを選択します。 
グラフを更新するには、グラフの上にあるバーの更新ボタンを選択します。
 
UPSTREAM_FAILED エラー・コードが原因でリフレッシュに失敗した場合、グラフを使用して、どのアップストリーム・テーブルが原因で失敗したかを視覚化できます。
 
グラフ内の表の詳細を表示するには、 動的なテーブルのリストや特定の列の情報の表示 を参照してください。
SQL テーブル関数を使用した動的テーブルの監視¶
以下の INFORMATION_SCHEMA テーブル関数を使用して、動的テーブルを監視します。
- DYNAMIC_TABLES: 現在時刻から7日以内の、ラグ・メトリクスの集計や最新のリフレッシュのステータスなど、動的テーブルに関するメタデータを返します。 
- DYNAMIC_TABLE_REFRESH_HISTORY: リフレッシュのステータス、トリガー、ターゲット・ラグを含む、動的テーブルの完了したリフレッシュと実行中のリフレッシュに関する情報を返します。 - DYNAMIC_TABLE_REFRESH_HISTORY ビュー: この Account Usage 表示には、動的テーブル更新履歴の情報も表示されます。これは、 DYNAMIC_TABLE_REFRESH_HISTORY テーブル関数のデータ保持時間(7日間)よりも長い問題をデバッグするのに便利です。 
 
- DYNAMIC_TABLE_GRAPH_HISTORY: 各動的テーブルの履歴、プロパティ、他のテーブルや動的テーブルへの依存関係を提供する情報を返します。 - このテーブル関数を使用すると、指定した時点における動的テーブルの依存関係ツリーのスナップショットを取得できます。 - また、動的テーブルのプロパティの時間経過にともなう変更も出力に反映されます。各行は、動的テーブルと特定のプロパティのセットを表します。動的テーブルのプロパティ(例えばターゲット・ラグ)を変更すると、関数は最新のプロパティを返します。 
動的テーブルのリフレッシュ・ステータスの監視¶
ここでは、すべてまたは特定の動的テーブルの更新ステータスを表示する方法を説明します。
リフレッシュのトラブルシューティングについては、 動的テーブル更新のスキップ、スロー、失敗のトラブルシューティング および 動的テーブルのリフレッシュに関する一般的な問題の診断 を参照してください。
すべての動的テーブルのリフレッシュを監視¶
Snowsight または DYNAMIC_TABLES テーブル関数を使用して、すべての動的テーブルの更新ステータスを表示できます。
Snowsight にサインインします。ナビゲーションメニューで Transformation » 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 にサインインします。 
- ナビゲーションメニューで Transformation » 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.                           |
+--------------------+---------------------+-----------+------------------------------+----------------------------------------------------------------+