

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# SVL\_UDF\_LOG
<a name="r_SVL_UDF_LOG"></a>

 システムで定義された、ユーザー定義関数 (UDF) の実行時に生成するエラーと警告メッセージを記録します。

SVL\_UDF\_LOG はすべてのユーザーに表示されます。スーパーユーザーはすべての行を表示できますが、通常のユーザーは自分のデータのみを表示できます。詳細については、「[システムテーブルとビューのデータの可視性](cm_chap_system-tables.md#c_visibility-of-data)」を参照してください。

このテーブルの一部またはすべてのデータは、SYS モニタリングビュー [SYS\_UDF\_LOG](SYS_UDF_LOG.md) でも確認できます。SYS モニタリングビューのデータは、使いやすく理解しやすいようにフォーマットされます。クエリには、SYS モニタリングビューを使用することをお勧めします。

## テーブルの列
<a name="SVL_UDF_LOG-table-columns"></a>


| 列名  | データ型  | 説明  | 
| --- | --- | --- | 
| query | bigint | クエリ ID。この ID を使用して、他の各種システムテーブルおよびビューを結合できます。 | 
| メッセージ | char(4096) | 関数によって生成されたメッセージ。 | 
| 作成済み | timestamp | ログが作成された時間。 | 
| トレースバック | char(4096) | 使用可能な場合、この値は UDF 用のスタックのトレースバックを提供します。詳細については、Python の標準ライブラリの [traceback](https://docs.python.org/2/library/traceback.html) を参照してください。 | 
| funcname  | character(256) | 実行中の UDF の名前。 | 
| node  | integer | メッセージが生成されたノード。 | 
| slice | integer | メッセージが生成されたスライス。 | 
| seq | integer | スライス上のメッセージのシーケンス。 | 

## サンプルクエリ
<a name="SVL_UDF_LOG-sample-queries"></a>

次の例では 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.
```