SQL ユーザー定義関数(UDF)は、MaxCompute で Java または Python のみを使用して UDF を作成できるという問題を解決し、関数型の引数をサポートします。 これにより、ビジネスロジックの式の柔軟性が向上します。 永続 SQL UDF と一時 SQL UDF を作成できます。 このトピックでは、CREATE SQL FUNCTION 文を実行して永続 SQL UDF を作成する方法について説明します。
注意事項
SQL 文を使用して UDF を定義する場合は、SQL スクリプトモードで操作を実行してください。 共通 SQL 編集モードで操作を実行すると、エラーが発生する可能性があります。
説明MaxCompute の SQL スクリプトモードの詳細については、「スクリプトモードの SQL」をご参照ください。
MaxCompute では、
CREATE SQL FUNCTION文を実行して SQL UDF を作成できます。 この文を使用して作成された UDF は、永続 SQL UDF です。 CREATE SQL FUNCTION 文を使用して UDF が作成されると、UDF は MaxCompute のメタデータシステムに保存されます。 MaxCompute の関数リストで UDF をクエリできます。 後続のすべてのクエリ操作で UDF を呼び出すことができます。説明一時 SQL UDF を作成する方法の詳細については、「FUNCTION」をご参照ください。
SQL 文を使用して UDF を定義する場合は、UDF の入力パラメーターのデータ型が MaxCompute でサポートされているデータ型であることを確認してください。 MaxCompute でサポートされているデータ型の詳細については、「MaxCompute V2.0 データ型エディション」をご参照ください。 UDF を作成した後、呼び出す SQL UDF の入力パラメーターのデータ型が、定義された UDF の入力パラメーターのデータ型と同じであることを確認してください。
SQL UDF を作成、クエリ、呼び出し、または削除する場合は、使用する Alibaba Cloud アカウントに必要な関数レベルの権限があることを確認してください。 関数レベルの権限と承認操作の詳細については、「MaxCompute の権限」をご参照ください。
構文
create sql function <function_name>(@<parameter_in1> <datatype>[, @<parameter_in2> <datatype>...])
[returns @<parameter_out> <datatype>]
as [begin]
<function_expression>
[end];パラメーター
function_name: 必須。このパラメーターは、作成する SQL UDF の名前を指定します。 関数名はプロジェクト内で一意である必要があり、ビルトイン関数と同じ名前にすることはできません。 同じ名前の関数は 1 回だけ登録できます。 LIST FUNCTIONS 文を実行して、プロジェクト内のすべての関数を表示し、既存の関数が作成する関数と同じ名前かどうかを確認できます。
parameter_in: 必須。このパラメーターは、作成する SQL UDF の入力パラメーターを指定します。 入力パラメーターは、匿名関数を含む関数型にすることができます。 入力パラメーターが関数型である SQL UDF を作成する方法の詳細については、「入力パラメーターが関数型である SQL UDF を作成する例」をご参照ください。 入力パラメーターが匿名関数である SQL UDF を作成する方法の詳細については、「入力パラメーターが匿名関数である SQL UDF を作成する例」をご参照ください。
datatype: 必須。このパラメーターは、UDF の入力パラメーターのデータ型を指定します。 MaxCompute でサポートされているデータ型の詳細については、「MaxCompute V2.0 データ型エディション」をご参照ください。
returns: オプション。このパラメーターは、UDF の戻り値を指定します。 戻り値は変数です。 このパラメーターを指定しない場合、function_name パラメーターの値がデフォルトで返されます。
parameter_out: 必須。このパラメーターは、UDF のレスポンスパラメーターを指定します。
function_expression: 必須。このパラメーターは、UDF の式(実装ロジック)を指定します。
例
次のサンプルコードは、単純なロジックを持つ UDF の例を示しています。
create sql function my_add(@a BIGINT) as @a + 1;前の例では、
@a + 1は SQL UDF のロジックを示しています。 式として記述できます。 式は、ビルトイン演算子、ビルトイン関数、または UDF にすることができます。UDF ロジックが複雑な場合は、SQL 文で begin と end を使用して UDF 式の範囲を指定できます。 begin と end で指定された範囲に複数の文を UDF 式として記述できます。 次のサンプルコードは例を示しています。
create sql function my_sum(@a BIGINT, @b BIGINT, @c BIGINT) returns @my_sum BIGINT as begin @temp := @a + @b; @my_sum := @temp + @c; end;パラメーター:
returns は、UDF の戻り値を指定します。 戻り値は変数です。 このパラメーターを指定しない場合、function_name パラメーターの値がデフォルトで返されます。
begin と end の式は、SQL UDF の関数実装ロジックです。
SQL UDF の入力パラメーターは、MaxCompute のビルトイン関数や他の UDF などの関数型にすることができます。 関連する例の詳細は、「入力パラメーターが関数型であるSQL UDFを作成する方法の例」および「入力パラメーターが匿名関数であるSQL UDFを作成する方法の例」をご参照ください。
関連ステートメント
FUNCTION: 一時 SQL UDF を作成します。 SQL UDF を MaxCompute のメタデータシステムに保存する必要がない場合は、一時 SQL UDF を作成できます。
DESC FUNCTION: MaxCompute プロジェクト内の指定された UDF に関する情報を表示します。 情報には、UDF の名前、所有者、作成時刻、クラス名、およびリソースリストが含まれます。
LIST FUNCTIONS: MaxCompute プロジェクト内のすべての UDF に関する情報を表示します。
DROP FUNCTION: 既存の UDF を MaxCompute プロジェクトから削除します。
SELECT FUNCTION: SQL UDF を呼び出します。