メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012-12-01)

スカラー UDF の作成

スカラー UDF には、関数が呼び出されると実行され、単一値を返す Python プログラムが組み込まれています。CREATE FUNCTION コマンドは以下のパラメーターを定義します。

  • (省略可能) 入力引数。各引数に名前とデータ型がある必要があります。

  • 1 つの戻りデータ型。

  • 1 つの実行可能な Python プログラム。

CREATE FUNCTION の構文は次のとおりです。

Copy to clipboard
CREATE [ OR REPLACE ] FUNCTION f_function_name ( [ argument_name arg_type [ , ... ] ] ) RETURNS data_type { VOLATILE | STABLE | IMMUTABLE } AS $$ python_program $$ LANGUAGE plpythonu;

Amazon Redshift クエリがスカラー UDF を呼び出すと、以下のステップが実行時に発生します。

  1. 関数が入力引数を Python データ型に変換します。

    Amazon Redshift データ型と Python データ型のマッピングについては、「UDF のデータ型」を参照してください。

  2. 関数が Python プログラムを実行し、変換した入力引数を渡します。

  3. Python コードが単一値を返します。戻り値のデータ型は、関数定義で指定されている RETURNS データ型と対応している必要があります。

  4. 関数が Python の戻り値を、指定されている Amazon Redshift データ型に変換してから、その値をクエリに返します。

スカラー関数の例

次の例は、2 つの数値を比較し、大きいほうの数値を返す関数を作成する方法を示しています。二重ドル記号 ($$) の間にあるコードのインデントは Python の要件です。詳細については、「CREATE FUNCTION」を参照してください。

Copy to clipboard
create function f_greater (a float, b float) returns float stable as $$ if a > b: return a return b $$ language plpythonu;

次のクエリは、新しい f_greater 関数を呼び出して SALES テーブルをクエリし、COMMISSION または PRICEPAID の 20% のどちらか大きいほうを返します。

Copy to clipboard
select f_greater (commission, pricepaid*0.20) from sales;

このページの内容: