UDF のエラーおよび警告のログ記録 - Amazon Redshift

UDF のエラーおよび警告のログ記録

Python ロギングモジュールを使用して、ユーザー定義のエラーおよび警告メッセージを UDF 内に作成できます。クエリの実行に続いて、SVL_UDF_LOG システムビューをクエリしてログ記録されたメッセージを取得できます。

注記

UDF のログ記録はクラスターのリソースを消費し、システムのパフォーマンスに影響する場合があります。ログ記録は開発およびトラブルシューティングのためにのみ実装することをお勧めします。

クエリの実行中に、ログハンドラは、対応する関数名、ノード、およびスライスとともに、SVL_UDF_LOG システムビューにメッセージを書き込みます。ログハンドラはメッセージごと、スライスごとに 1 行を SVL_UDF_LOG に書き込みます。メッセージは 4096 バイトで切り捨てられます。UDF のログはスライスごとに 500 行に制限されます。ログがいっぱいになると、ログハンドラは古い方からメッセージを破棄し、SVL_UDF_LOG に警告メッセージを追加します。

注記

Amazon Redshift の UDF ログハンドラでは、改行 ( \n )、パイプ ( | ) 文字、バックスラッシュ ( \ ) 文字を、バックスラッシュ ( \ ) 文字でエスケープします。

デフォルトでは、UDF ログレベルは WARNING に設定されます。ログレベルが WARNING、ERROR、および CRITICAL のメッセージがログ記録されます。重要度がより低い INFO、DEBUG、および NOTSET のメッセージは無視されます。UDF のログレベルを設定するには、Python のロガーメソッドを使用します。次の例では、ログレベルを INFO に設定します。

logger.setLevel(logging.INFO)

Python ロギングモジュールの使用の詳細については、「Python 用ロギング機能」を参照してください。

次の例は、Python ロギングモジュールをインポートし、ロガーをインスタンス化してエラーを記録する f_pyerror という関数を作成します。

CREATE OR REPLACE FUNCTION f_pyerror() RETURNS INTEGER VOLATILE AS $$ import logging logger = logging.getLogger() logger.setLevel(logging.INFO) logger.info('Your info message here') return 0 $$ language plpythonu;

次の例では、SVL_UDF_LOG をクエリして前の例でログ記録されたメッセージを表示します。

select funcname, node, slice, trim(message) as message from svl_udf_log; funcname | query | node | slice | message ------------+-------+------+-------+------------------ f_pyerror | 12345 | 1| 1 | Your info message here