動的テーブルのイベントテーブル監視とアラート¶
このトピックでは、リフレッシュステータスに関する情報を提供するイベントテーブルをクエリする方法と、イベントテーブルの新しいデータに関するアラートをセットアップする方法について説明します。
リフレッシュを監視するためにイベントテーブルをクエリします。¶
動的テーブルがリフレッシュされたときに、リフレッシュ操作のステータスに関する情報を提供するイベントを記録するように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;
+-------------------------+------------------+--------------------------------------+---------------------------------------------------------------------------------+
| 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" | | | | | | | |
| | | | | | } | | | | | | | |
+-------------------------+-----------------+-------------------------+-------+----------+-------------------------------------------------+-------+------------------+-------------+-----------------------------+-------------------+-------------------------------+-----------+
イベントテーブルをクエリするために必要なロールや、結果をフィルターするために使用できる条件については、 新しいデータのアラート設定 を参照してください。
新しいデータに対するアラートをセットし、更新を監視します。¶
前述したように、動的テーブルがリフレッシュされると、リフレッシュが成功したか失敗したかを示すイベントがイベント・テーブルにログ記録されます。イベントテーブルを監視するために、 新しいデータに対してアラート をセットすることができます。リフレッシュが失敗したときに 通知を送信する ようにアラートを構成できます。
次のセクションでは、イベントをキャプチャするためのイベントログのセットアップ方法、アラートのセットアップ方法、イベントテーブルに記録されたイベントの解釈方法について説明します。
注釈
動的テーブルのイベントのログにはコストがかかります。 テレメトリーデータ収集の費用 をご参照ください。
キャプチャするイベントの重大度レベルのセット¶
注釈
重大度レベルをセットしないと、イベントはキャプチャされません。
イベント・テーブルに記録する動的テーブル・イベントを設定するには、イベント・テーブルに記録する イベントの重大度レベルをセットします。イベントは以下のレベルで捕捉されます。
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 |
|
|