SQL語言定義函數作為一種使用者自訂函數(UDF),彌補了MaxCompute只能用Java或Python建立UDF的不足,還擴充了UDF入參的參數類型,可支援函數類型的入參參數,提升表達商務邏輯的靈活性。SQL UDF支援永久UDF和臨時UDF,本文為您介紹通過FUNCTION命令建立的臨時SQL UDF詳情。
注意事項
使用SQL定義UDF時,您需要使用SQL指令碼模式進行操作,普通SQL編輯模式可能會導致定義報錯的問題。
說明MaxCompute的SQL指令碼模式介紹及使用指導請參見SQL指令碼模式。
MaxCompute支援通過
function
命令建立SQL UDF,且通過此命令建立的UDF為臨時SQL UDF,即建立完成後不會存入MaxCompute的Meta系統,因此無法在MaxCompute的函數列表中查詢到此UDF,後續僅支援在當前SQL指令碼中調用此臨時UDF,其他環境中無法直接調用此UDF。說明建立永久SQL UDF的詳情請參見CREATE SQL FUNCTION。
使用SQL定義UDF時,UDF入參的參數類型需為MaxCompute支援的資料類型,支援的資料類型請參見2.0資料類型版本;在UDF建立完成後,在調用SQL UDF時,請確保調用時的入參與定義UDF的入參參數類型保持一致。
在建立、查詢、調用、刪除SQL自訂函數時,操作的阿里雲帳號需要具備Function層級的許可權。更多Function許可權及授權操作,請參見MaxCompute許可權。
命令格式
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的運算式(實現邏輯)。
使用樣本
function my_add(@a BIGINT) as @a + 1;
相關命令
CREATE SQL FUNCTION:建立永久SQL UDF並存入Meta系統後,所有的查詢操作都可以調用該函數。
DESC FUNCTION:通過FUNCTION命令建立的臨時SQL UDF無法通過DESC FUNCTION來查看,DESC FUNCTION可以查看MaxCompute專案中永久儲存的自訂函數的資訊,包含函數名稱、所有者、建立時間、類名和資源清單資訊。
DROP FUNCTION:在MaxCompute專案中登出登入的自訂函數。
SELECT FUNCTION:調用SQL UDF,臨時SQL UDF僅支援在同指令碼中調用,其他查詢環境無法調用臨時SQL UDF。