動的テーブルのイベントテーブル監視とアラート

このトピックでは、リフレッシュステータスに関する情報を提供するイベントテーブルをクエリする方法と、イベントテーブルの新しいデータに関するアラートをセットアップする方法について説明します。

リフレッシュを監視するためにイベントテーブルをクエリします。

動的テーブルがリフレッシュされたときに、リフレッシュ操作のステータスに関する情報を提供するイベントを記録するようにSnowflakeを構成できます。イベントは、動的テーブルに関連付けられた アクティブ イベント テーブル に記録されます。

例えば、 イベントテーブルをデータベースに関連付けた とします。データベースの動的テーブルが更新されると、Snowflakeはそのイベントテーブルにイベントを記録します。

このアクティブ・イベント・テーブルにログ記録されたイベントをクエリして、動的テーブルの更新を監視できます。

た と えば、データベース my_db の動的テーブルを使用したエラーについて、タイムスタンプ、動的テーブル名、クエリ ID、およびエラーメッセージを取得するには、以下のようにします。

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"               |       |                  |             |                             |                   |                               |           |
|                         |                 |                         |       |          | }                                               |       |                  |             |                             |                   |                               |           |
+-------------------------+-----------------+-------------------------+-------+----------+-------------------------------------------------+-------+------------------+-------------+-----------------------------+-------------------+-------------------------------+-----------+

イベントテーブルをクエリするために必要なロールや、結果をフィルターするために使用できる条件については、 新しいデータのアラート設定 を参照してください。

新しいデータに対するアラートをセットし、更新を監視します。

前述したように、動的テーブルがリフレッシュされると、リフレッシュが成功したか失敗したかを示すイベントがイベント・テーブルにログ記録されます。イベントテーブルを監視するために、 新しいデータに対してアラート をセットすることができます。リフレッシュが失敗したときに 通知を送信する ようにアラートを構成できます。

次のセクションでは、イベントをキャプチャするためのイベントログのセットアップ方法、アラートのセットアップ方法、イベントテーブルに記録されたイベントの解釈方法について説明します。

注釈

動的テーブルのイベントのログにはコストがかかります。 テレメトリーデータ収集の費用 をご参照ください。

キャプチャするイベントの重大度レベルのセット

注釈

重大度レベルをセットしないと、イベントはキャプチャされません。

イベント・テーブルに記録する動的テーブル・イベントを設定するには、イベント・テーブルに記録する イベントの重大度レベルをセットします。イベントは以下のレベルで捕捉されます。

  • 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.