Snowflake Scriptingでのメッセージのログ

Snowflake SYSTEM$LOG、 SYSTEM$LOG_<レベル> (Snowflakeスクリプトの場合) 関数を使用すると、Snowflakeスクリプトで記述された関数またはプロシージャハンドラーからのメッセージをログできます。ログエントリを格納するイベントテーブルを設定すると、Snowflakeはハンドラーコードによって生成されたログエントリをテーブルに格納します。

コードからログする前に、必要なメッセージがイベントテーブルに格納されるようにログレベルが設定されていることを確認してください。詳細については、 ロギング、メトリクス、トレースのレベル設定 をご参照ください。

注釈

メッセージのログを開始する前に、イベントテーブルを設定する必要があります。詳細については、 イベントテーブルの概要 をご参照ください。

イベントテーブルで SELECT コマンドを実行すると、ログメッセージにアクセスできます。詳細については、 ログメッセージの表示 をご参照ください。

Snowflakeでのログの設定とメッセージの取得に関する一般的な情報については、 関数とプロシージャからのメッセージのログ をご参照ください。

Snowflake Scriptingの例

次の例のコードでは、 SYSTEM$LOG 関数を使用して、サポートされている各レベルでメッセージをログします。入力行を処理するコードからログされるメッセージは、ハンドラーによって処理される 行ごと にログされることに注意してください。ハンドラーが大きなテーブルで実行されると、イベントテーブルに多数のメッセージが生成される可能性があります。

-- The following calls are equivalent.
-- Both log information-level messages.
SYSTEM$LOG('info', 'Information-level message');
SYSTEM$LOG_INFO('Information-level message');

-- The following calls are equivalent.
-- Both log error messages.
SYSTEM$LOG('error', 'Error message');
SYSTEM$LOG_ERROR('Error message');


-- The following calls are equivalent.
-- Both log warning messages.
SYSTEM$LOG('warning', 'Warning message');
SYSTEM$LOG_WARN('Warning message');

-- The following calls are equivalent.
-- Both log debug messages.
SYSTEM$LOG('debug', 'Debug message');
SYSTEM$LOG_DEBUG('Debug message');

-- The following calls are equivalent.
-- Both log trace messages.
SYSTEM$LOG('trace', 'Trace message');
SYSTEM$LOG_TRACE('Trace message');

-- The following calls are equivalent.
-- Both log fatal messages.
SYSTEM$LOG('fatal', 'Fatal message');
SYSTEM$LOG_FATAL('Fatal message');
Copy

ブロックと子ジョブに関するログメッセージを自動的に追加

Snowflake Scriptingストアドプロシージャの実行について、以下の追加情報を自動的にログに記録できます。

  • Snowflake Scriptingブロックの BEGIN/END。

  • 子ジョブ・リクエストの BEGIN/END。

自動ログは、以下のような使用ケースを想定しています。

  • ストアドプロシージャの本文を変更せずに追加ログメッセージを生成したい場合があります。

  • ストアドプロシージャの実行に関する包括的な情報が必要です。

  • 手動でプロシージャにログコードを追加することなく、ストアドプロシージャの開発とデバッグを容易にするために、ストアドプロシージャの実行をより可視化したいでしょう。

ストアド プロシージャのこれらの Snowflake Scripting メッセージを自動的にログに記録するには、 ALTER PROCEDURE コマンドを使用して、ストアドプロシージャの AUTO_EVENT_LOGGING パラメーターを LOGGING または ALL に設定します。このパラメーターを ALL にセットすると、追加の トレースイベント もストアドプロシージャに対して自動的に発行されます。

重要

有効な LOG_LEVELTRACE にセットされている場合のみ、追加情報がイベントテーブルに追加されます。詳細については、 ロギング、メトリクス、トレースのレベル設定 をご参照ください。

例えば、簡単なテーブルを作成し、データを挿入します。

CREATE OR REPLACE TABLE test_auto_event_logging (id INTEGER, num NUMBER(12, 2));

INSERT INTO test_auto_event_logging (id, num) VALUES
  (1, 11.11),
  (2, 22.22);
Copy

次に、 auto_event_logging_sp というストアドプロシージャを作成します。このサンプルストアドプロシージャは、テーブルの行を更新し、テーブルにクエリします。

CREATE OR REPLACE PROCEDURE auto_event_logging_sp(
  table_name VARCHAR,
  id_val INTEGER,
  num_val NUMBER(12, 2))
RETURNS TABLE()
LANGUAGE SQL
AS
$$
BEGIN
  UPDATE IDENTIFIER(:table_name)
    SET num = :num_val
    WHERE id = :id_val;
  LET res RESULTSET := (SELECT * FROM IDENTIFIER(:table_name) ORDER BY id);
  RETURN TABLE(res);
EXCEPTION
  WHEN statement_error THEN
    res := (SELECT :sqlcode sql_code, :sqlerrm error_message, :sqlstate sql_state);
    RETURN TABLE(res);
END;
$$
;
Copy

以下の例では、ストアドプロシージャに AUTO_EVENT_LOGGING パラメーターをセットしています。

ALTER PROCEDURE auto_event_logging_sp(VARCHAR, INTEGER, NUMBER)
  SET AUTO_EVENT_LOGGING = 'LOGGING';
Copy
ALTER PROCEDURE auto_event_logging_sp(VARCHAR, INTEGER, NUMBER)
  SET AUTO_EVENT_LOGGING = 'ALL';
Copy

ストアドプロシージャを呼び出します。

CALL auto_event_logging_sp('test_auto_event_logging', 2, 33.33);
Copy
+----+-------+
| ID |   NUM |
|----+-------|
|  1 | 11.11 |
|  2 | 33.33 |
+----+-------+

auto_event_logging_sp というストアドプロシージャによってログに記録されたメッセージをイベントテーブルにクエリします。各メッセージについて、タイムスタンプ、ログレベル、メッセージのテキストを出力します。

SELECT
    TIMESTAMP as time,
    RECORD['severity_text'] as severity,
    VALUE as message
  FROM
    my_db.public.my_events
  WHERE
    RESOURCE_ATTRIBUTES['snow.executable.name'] LIKE '%AUTO_EVENT_LOGGING_SP%'
    AND RECORD_TYPE = 'LOG';
Copy
+-------------------------+----------+----------------------------------+
| TIME                    | SEVERITY | MESSAGE                          |
|-------------------------+----------+----------------------------------|
| 2024-10-25 20:42:24.134 | "TRACE"  | "Entering outer block at line 2" |
| 2024-10-25 20:42:24.135 | "TRACE"  | "Entering block at line 2"       |
| 2024-10-25 20:42:24.135 | "TRACE"  | "Starting child job"             |
| 2024-10-25 20:42:24.633 | "TRACE"  | "Ending child job"               |
| 2024-10-25 20:42:24.633 | "TRACE"  | "Starting child job"             |
| 2024-10-25 20:42:24.721 | "TRACE"  | "Ending child job"               |
| 2024-10-25 20:42:24.721 | "TRACE"  | "Exiting with return at line 7"  |
+-------------------------+----------+----------------------------------+