マテリアライズドビューでのユーザー定義関数 (UDF) の使用
Amazon Redshift マテリアライズドビューではスカラー UDF を使用できます。これらを Python または SQL で定義し、マテリアライズドビュー定義で参照します。
マテリアライズドビューでの UDF の参照
以下の手順は、マテリアライズドビュー定義で簡単な算術比較を行う UDF を使用する方法を示しています。
マテリアライズドビュー定義で使用するテーブルを作成します。
CREATE TABLE base_table (a int, b int);
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;
作成したテーブルから選択し、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;
テーブルにデータを追加し、マテリアライズドビューを更新します。
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;
マテリアライズドビューからデータをクエリします。
SELECT * FROM mv_python_udf ORDER BY a;
このクエリの結果は以下のようになります。
a ----- false false true
列
a
の値 (4) は列b
の値 (2) より大きいため、これは最後の値のセットに対してtrue
を返します。-
オプションで、SQL UDF を参照するマテリアライズドビューをクエリできます。SQL 関数の結果は、Python バージョンの結果と一致します。
SELECT * FROM mv_sql_udf ORDER BY a;
このクエリの結果は以下のようになります。
a ----- false false true
これは、比較する最後の値のセットについて
true
を返します。 CASCADE を指定した DROP ステートメントを使用して、ユーザー定義関数とそれを参照するマテリアライズドビューを削除します。
DROP FUNCTION udf_python_bool(int, int) CASCADE;
DROP FUNCTION udf_sql_bool(int, int) CASCADE;