スカラー Python UDF の作成 - Amazon Redshift

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

スカラー 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

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

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

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

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

  4. 関数が 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 入力引数に指定されている実際のデータ型と同じです。