SQL語言定義函數作為一種使用者自訂函數(UDF),彌補了MaxCompute只能用Java或Python建立UDF的不足,還擴充了UDF入參的參數類型,可支援函數類型的入參參數,提升表達商務邏輯的靈活性。SQL UDF支援永久UDF和臨時UDF,本文為您介紹通過CREATE SQL FUNCTION命令建立的永久SQL UDF詳情。
注意事項
使用SQL定義UDF時,您需要使用SQL指令碼模式進行操作,普通SQL編輯模式可能會導致定義報錯的問題。
說明MaxCompute的SQL指令碼模式介紹及使用指導請參見SQL指令碼模式。
MaxCompute支援通過
create sql function
命令建立SQL UDF,且通過此命令建立的UDF為永久SQL UDF,即建立完成後會存入MaxCompute的Meta系統後(可在MaxCompute的函數列表中查詢到此UDF),後續所有的查詢操作都可以調用該函數。說明建立臨時SQL UDF的詳情請參見FUNCTION。
使用SQL定義UDF時,UDF入參的參數類型需為MaxCompute支援的資料類型,支援的資料類型請參見2.0資料類型版本;在UDF建立完成後,在調用SQL UDF時,請確保調用時的入參與定義UDF的入參參數類型保持一致。
在建立、查詢、調用、刪除SQL自訂函數時,操作的阿里雲帳號需要具備Function層級的許可權。更多Function許可權及授權操作,請參見MaxCompute許可權。
命令格式
create sql function <function_name>(@<parameter_in1> <datatype>[, @<parameter_in2> <datatype>...])
[returns @<parameter_out> <datatype>]
as [begin]
<function_expression>
[end];
參數說明
function_name:必填。建立的SQL語言定義函數的名稱。函數名稱需要在專案內唯一,同名函數只能註冊一次,且不能與系統內建函數同名。您可以通過LIST FUNCTIONS命令查看專案下的全部函數,來檢查是否有同名函數。
parameter_in:必填。函數的輸入參數。入參支援函數型別參數(包括匿名函數)。入參為函數類型的樣本詳情請參見SQL UDF樣本:入參為函數,匿名函數類型的入參樣本詳情請參見建立SQL UDF樣本:入參為匿名函數。
datatype:必填。定義函數的輸入參數的資料類型,支援的資料類型請參見2.0資料類型版本。
returns:可選。定義UDF的傳回值變數。如果不指定,預設返回function_name的同名變數。
parameter_out:必填。定義UDF的返回參數。
function_expression:必填。定義UDF的運算式(實現邏輯)。
使用樣本
UDF邏輯簡單時,樣本如下。
create sql function my_add(@a BIGINT) as @a + 1;
@a + 1
為函數實現邏輯,可直接寫為運算式,支援內建操作符、內建函數和UDF。UDF邏輯複雜時,可以在定義中使用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指定傳回值變數,如果不指定,預設返回function_name的同名變數。
begin和end內的兩行運算式即為SQL UDF的函數實現邏輯。
SQL UDF的輸入參數支援為函數,包括內建函數、UDF,相關樣本可參見SQL UDF樣本:入參為函數、建立SQL UDF樣本:入參為匿名函數。
相關命令
FUNCTION:如果您不需要把SQL語言定義函數存入MaxCompute的Meta系統,可以使用臨時SQL語言定義函數。
DESC FUNCTION:查看MaxCompute專案中指定自訂函數的資訊,包含函數名稱、所有者、建立時間、類名和資源清單資訊。
LIST FUNCTIONS:查看MaxCompute專案中所有自訂函數的資訊。
DROP FUNCTION:在MaxCompute專案中登出登入的自訂函數。
SELECT FUNCTION:調用SQL語言定義函數。