SVL_UDF_LOG
システムで定義された、ユーザー定義関数 (UDF) の実行時に生成するエラーと警告メッセージを記録します。
SVL_UDF_LOG はすべてのユーザーに表示されます。スーパーユーザーはすべての行を表示できますが、通常のユーザーは自分のデータのみを表示できます。詳細については、「システムテーブルとビューのデータの可視性」を参照してください。
このテーブルの一部またはすべてのデータは、SYS モニタリングビュー SYS_UDF_LOG でも確認できます。SYS モニタリングビューのデータは、使いやすく理解しやすいようにフォーマットされます。クエリには、SYS モニタリングビューを使用することをお勧めします。
テーブルの列
列名 | データ型 | 説明 |
---|---|---|
query | bigint | クエリ ID。この ID を使用して、他の各種システムテーブルおよびビューを結合できます。 |
メッセージ | char(4096) | 関数によって生成されたメッセージ。 |
作成済み | timestamp | ログが作成された時間。 |
トレースバック | char(4096) | 使用可能な場合、この値は UDF 用のスタックのトレースバックを提供します。詳細については、Python の標準ライブラリの traceback |
funcname | character(256) | 実行中の UDF の名前。 |
node | integer | メッセージが生成されたノード。 |
slice | integer | メッセージが生成されたスライス。 |
seq | integer | スライス上のメッセージのシーケンス。 |
サンプルクエリ
次の例では UDF がシステム定義されたエラーをどのように処理するかを示します。最初のブロックは、引数の逆を返す UDF 関数の定義を示します。2 番目のブロックに示すように、関数を実行して引数を 0 に指定すると、関数はエラーを返します。3 番目のステートメントは、SVL_UDF_LOG とログされたエラーメッセージを読み取ります
-- Create a function to find the inverse of a number CREATE OR REPLACE FUNCTION f_udf_inv(a int) RETURNS float IMMUTABLE AS $$ return 1/a $$ LANGUAGE plpythonu; -- Run the function with a 0 argument to create an error Select f_udf_inv(0) from sales; -- Query SVL_UDF_LOG to view the message Select query, created, message::varchar from svl_udf_log; query | created | message -------+----------------------------+--------------------------------------------------------- 2211 | 2015-08-22 00:11:12.04819 | ZeroDivisionError: long division or modulo by zero\nNone
次の例では、UDF にログされたメッセージと警告メッセージを追加することで、ゼロで分割された操作がエラーメッセージで停止する代わりに警告メッセージとなります。
-- Create a function to find the inverse of a number and log a warning CREATE OR REPLACE FUNCTION f_udf_inv_log(a int) RETURNS float IMMUTABLE AS $$ import logging logger = logging.getLogger() #get root logger if a==0: logger.warning('You attempted to divide by zero.\nReturning zero instead of error.\n') return 0 else: return 1/a $$ LANGUAGE plpythonu;
次の例は、関数を実行し、その後 SVL_UDF_LOG をクエリしていうメッセージを表示します。
-- Run the function with a 0 argument to trigger the warning Select f_udf_inv_log(0) from sales; -- Query SVL_UDF_LOG to view the message Select query, created, message::varchar from svl_udf_log; query | created | message ------+----------------------------+---------------------------------- 0 | 2015-08-22 00:11:12.04819 | You attempted to divide by zero. Returning zero instead of error.