ログエントリのためにイベントテーブルをクエリする
ログに記録されたメッセージにアクセスするには、イベント・テーブルに対して SELECT コマンドを実行します。
イベントテーブルには、ログされたメッセージに関する情報をキャプチャする、次のような事前定義された列のセットがあります。
メッセージがインジェストされたときのタイムスタンプ。
ログイベントが作成されたクラスの名前など、ログイベントのスコープ。
データベース、スキーマ、ユーザー、ウェアハウスなどを含むログイベントソース。
ログの重大度レベル。
ログメッセージ。
イベントテーブルの構造に関する参考情報は、 イベントテーブル列 をご参照ください。
次のセクションでは、データ例を使用して、イベントテーブルにログメッセージデータをクエリする方法を説明します。
収集されたデータ
次の例の出力は、2つの個別のハンドラー(1つはScalaで記述され、もう1つはPythonで記述)に対してログメッセージがキャプチャされた後の、イベントテーブルから選択した列のサブセットの内容を示しています。
ログメッセージデータを収集するイベントテーブル列の参照情報については、 ログのデータ をご参照ください。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| TIMESTAMP | SCOPE | RESOURCE_ATTRIBUTES | RECORD_TYPE | RECORD | VALUE |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | { "name": "python_logger" } | **See excerpt below** | LOG | { "severity_text": "INFO" } | Logging from Python module. |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | { "name": "python_logger" } | **See excerpt below** | LOG | { "severity_text": "INFO" } | Logging from Python function start. |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | { "name": "python_logger" } | **See excerpt below** | LOG | { "severity_text": "ERROR" } | Logging an error from Python handler. |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:12:55 | { "name": "ScalaLoggingHandler" } | **See excerpt below** | LOG | { "severity_text": "INFO" } | Logging from within the Scala constructor. |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:12:56 | { "name": "ScalaLoggingHandler" } | **See excerpt below** | LOG | { "severity_text": "INFO" } | Logging from Scala method start. |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:12:56 | { "name": "ScalaLoggingHandler" } | **See excerpt below** | LOG | { "severity_text": "ERROR" } | Logging an error from Scala handler: Something went wrong. |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
RESOURCE_ATTRIBUTES 抜粋
次の JSON は、先の出力の RESOURCE_ATTRIBUTES 列にある値の抜粋を含みます。それぞれの snow.executable.name の名前と値のペアは、直前の出力の異なる行のものです。
この抜粋に続く SELECT クエリ コードは、 RESOURCE_ATTRIBUTES 列の値から選択します。
RESOURCE_ATTRIBUTES 列には、イベントのソースに関するデータが含まれています。参照情報については、 RESOURCE_ATTRIBUTES 列 をご参照ください。
{
...
"snow.executable.name": "ADD_TWO_NUMBERS(A FLOAT, B FLOAT):FLOAT"
...
}
{
...
"snow.executable.name": "ADD_TWO_NUMBERS(A FLOAT, B FLOAT):FLOAT"
...
}
{
...
"snow.executable.name": "ADD_TWO_NUMBERS(A FLOAT, B FLOAT):FLOAT"
...
}
{
...
"snow.executable.name": "DO_LOGGING():VARCHAR(16777216)"
...
}
{
...
"snow.executable.name": "DO_LOGGING():VARCHAR(16777216)"
...
}
{
...
"snow.executable.name": "DO_LOGGING():VARCHAR(16777216)"
...
}
SELECT ステートメントを使用したクエリ
メッセージデータをクエリする場合は、次の形式のように、 括弧表記 を使用して列内の属性値を選択できます。
COLUMN_NAME['attribute_name']
以下の例のコードは、Pythonハンドラーのログメッセージに関連するデータを分離することを目的として、前のテーブルをクエリします。クエリは、ログエントリの重大度として severity_text 属性を選択します。ログメッセージの VALUE 列のコンテンツを選択します。
ハンドラーを含んでいるプロシージャは、 do_logging と呼ばれます。クエリが機能するためには、プロシージャ名をすべて大文字で指定する必要があることに注意してください。
SET event_table_name='my_db.public.my_event_table';
SELECT
TIMESTAMP as time,
RESOURCE_ATTRIBUTES['snow.executable.name'] as executable,
RECORD['severity_text'] as severity,
VALUE as message
FROM
IDENTIFIER($event_table_name)
WHERE
SCOPE['name'] = 'python_logger'
AND RESOURCE_ATTRIBUTES['snow.executable.name'] LIKE '%DO_LOGGING%'
AND RECORD_TYPE = 'LOG';
クエリ結果
次の例の出力は、クエリの結果を示しています。
----------------------------------------------------------------------------------------------------------------
| TIME | EXECUTABLE | SEVERITY | MESSAGE |
----------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | "DO_LOGGING():VARCHAR(16777216)" | "INFO" | "Logging from Python module." |
----------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | "DO_LOGGING():VARCHAR(16777216)" | "INFO" | "Logging from Python function start." |
----------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | "DO_LOGGING():VARCHAR(16777216)" | "ERROR" | "Logging an error from Python handler" |
----------------------------------------------------------------------------------------------------------------