SVL_UDF_LOG - Amazon Redshift

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.