

 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/)を参照してください。

# マテリアライズドビューでのユーザー定義関数 (UDF) の使用
<a name="materialized-view-UDFs"></a>

Amazon Redshift マテリアライズドビューではスカラー UDF を使用できます。これらを Python または SQL で定義し、マテリアライズドビュー定義で参照します。

## マテリアライズドビューでの UDF の参照
<a name="materialized-view-UDFs-examples"></a>

以下の手順は、マテリアライズドビュー定義で簡単な算術比較を行う UDF を使用する方法を示しています。

1. マテリアライズドビュー定義で使用するテーブルを作成します。

   ```
   CREATE TABLE base_table (a int, b int);
   ```

1. Python で、整数が比較整数より大きいかどうかを示すブール値を返すスカラーユーザー定義関数を作成します。

   ```
   CREATE OR REPLACE FUNCTION udf_python_bool(x1 int, x2 int) RETURNS bool IMMUTABLE
   AS $$
     return x1 > x2
   $$ LANGUAGE plpythonu;
   ```

   オプションで、SQL で機能的に類似した UDF を作成し、それを使用して最初の UDF と結果を比較できます。

   ```
   CREATE OR REPLACE FUNCTION udf_sql_bool(int, int) RETURNS bool IMMUTABLE
   AS $$
     select $1 > $2;
   $$ LANGUAGE SQL;
   ```

1. 作成したテーブルから選択し、UDF を参照するマテリアライズドビューを作成します。

   ```
   CREATE MATERIALIZED VIEW mv_python_udf AS SELECT udf_python_bool(a, b) AS a FROM base_table;
   ```

   オプションで、SQL UDF を参照するマテリアライズドビューを作成できます。

   ```
   CREATE MATERIALIZED VIEW mv_sql_udf AS SELECT udf_sql_bool(a, b) AS a FROM base_table;
   ```

1. テーブルにデータを追加し、マテリアライズドビューを更新します。

   ```
   INSERT INTO base_table VALUES (1,2), (1,3), (4,2);
   ```

   ```
   REFRESH MATERIALIZED VIEW mv_python_udf;
   ```

   オプションで、SQL UDF を参照するマテリアライズドビューを更新できます。

   ```
   REFRESH MATERIALIZED VIEW mv_sql_udf;
   ```

1. マテリアライズドビューからデータをクエリします。

   ```
   SELECT * FROM mv_python_udf ORDER BY a;
   ```

   このクエリの結果は以下のようになります。

   ```
   a
   -----
   false
   false
   true
   ```

   列 `a` の値 (4) は列 `b` の値 (2) より大きいため、これは最後の値のセットに対して `true` を返します。

1. オプションで、SQL UDF を参照するマテリアライズドビューをクエリできます。SQL 関数の結果は、Python バージョンの結果と一致します。

   ```
   SELECT * FROM mv_sql_udf ORDER BY a;
   ```

   このクエリの結果は以下のようになります。

   ```
   a
   -----
   false
   false
   true
   ```

   これは、比較する最後の値のセットについて `true` を返します。

1. CASCADE を指定した DROP ステートメントを使用して、ユーザー定義関数とそれを参照するマテリアライズドビューを削除します。

   ```
   DROP FUNCTION udf_python_bool(int, int) CASCADE;
   ```

   ```
   DROP FUNCTION udf_sql_bool(int, int) CASCADE;
   ```