マテリアライズドビューでのユーザー定義関数 (UDF) の使用 - Amazon Redshift

Amazon Redshift は、2025 年 11 月 1 日以降、新しい Python UDF の作成をサポートしなくなります。Python UDF を使用する場合は、その日付より前に UDF を作成してください。既存の Python UDF は引き続き通常どおり機能します。詳細については、ブログ記事を参照してください。

マテリアライズドビューでのユーザー定義関数 (UDF) の使用

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

マテリアライズドビューでの UDF の参照

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

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

    CREATE TABLE base_table (a int, b int);
  2. 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;
  3. 作成したテーブルから選択し、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;
  4. テーブルにデータを追加し、マテリアライズドビューを更新します。

    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;
  5. マテリアライズドビューからデータをクエリします。

    SELECT * FROM mv_python_udf ORDER BY a;

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

    a ----- false false true

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

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

    SELECT * FROM mv_sql_udf ORDER BY a;

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

    a ----- false false true

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

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

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