「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」
スカラー Python UDF の作成
スカラー Python UDF には、関数が呼び出され、単一の値を返すときに実行される Python プログラムが組み込まれています。CREATE FUNCTION コマンドは以下のパラメータを定義します。
-
(省略可能) 入力引数。各引数に名前とデータ型がある必要があります。
-
1 つの戻りデータ型。
-
1 つの実行可能な Python プログラム。
入力データ型および戻りデータ型には、SMALLINT、INTEGER、BIGINT、DECIMAL、REAL、DOUBLE PRECISION、BOOLEAN、CHAR、VARCHAR、DATE、または TIMESTAMP を使用できます。さらに、Python UDFs はデータタイプ ANYELEMENT を使用できます。このタイプは、Amazon Redshift によって、実行時に引数に基づいて、標準のデータタイプに自動的に変換されます。詳細については、「ANYELEMENT データ型」を参照してください。
クエリがスカラー UDF を呼び出すと、以下のステップが実行時に発生します。Amazon Redshift
-
関数が入力引数を Python データ型に変換します。
Amazon Redshift データ型と Python データ型のマッピングについては、「Python UDF データ型」を参照してください。
-
関数は Python プログラムを実行し、変換された入力引数を渡します。
-
Python コードが単一値を返します。戻り値のデータ型は、関数定義で指定されている RETURNS データ型と対応している必要があります。
-
関数が Python の戻り値を、指定されている Amazon Redshift データ型に変換してから、その値をクエリに返します。
スカラー Python UDF の例
次の例は、2 つの数値を比較し、大きいほうの数値を返す関数を作成する方法を示しています。二重ドル記号 ($$) の間にあるコードのインデントは Python の要件です。詳細については、「CREATE FUNCTION」を参照してください。
create function f_py_greater (a float, b float) returns float stable as $$ if a > b: return a return b $$ language plpythonu;
次のクエリは、新しい f_greater
関数を呼び出して SALES テーブルをクエリし、COMMISSION または PRICEPAID の 20% のどちらか大きいほうを返します。
select f_py_greater (commission, pricepaid*0.20) from sales;
ANYELEMENT データ型
ANYELEMENT は多相型です。つまり、引数のデータ型として ANYELEMENT を使用して関数を宣言すると、その関数は、その関数が呼び出されたときに、標準の Amazon Redshift データ型をその引数の入力として受け入れることができます。ANYELEMENT 引数は、関数が呼び出されたときに、それに実際に渡されるデータ型に設定されます。
1 つの関数が複数の ANYELEMENT データ型を使用する場合、これらのデータ型のすべてが、関数が呼び出されたときに、同一の実際のデータ型に解決される必要があります。すべての
ANYELEMENT 引数データ型が、ANYELEMENT に最初に渡される引数の実際のデータ型に設定されます。たとえば、f_equal(anyelement, anyelement)
として宣言されている関数は、これら 2 つの入力値が同じデータ型である限り、両方の入力値をとります。
関数の戻り値が ANYELEMENT として宣言されている場合は、少なくとも 1 つの入力引数が ANYELEMENT である必要があります。戻り値の実際のデータ型は、ANYELEMENT 入力引数に指定されている実際のデータ型と同じです。