全部產品
Search
文件中心

MaxCompute:CREATE SQL FUNCTION

更新時間:Jun 19, 2024

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語言定義函數。