在MaxCompute專案中註冊自訂函數。
前提條件
註冊自訂函數前,請先使用add jar <localfile> [comment '<comment>'][-f];
命令將自訂函數添加至MaxCompute專案中。詳情請參見ADD JAR。
使用限制
函數名稱全域唯一,同名函數只能註冊一次。
自訂函數無法覆蓋系統內建函數。只有專案Owner才有權利覆蓋內建函數。如果您使用了覆蓋內建函數的自訂函數,在SQL執行結束後,會在作業相應Logview的Summary中列印出Warning資訊。
命令格式
create function <function_name> as <'package_to_class'> using <'resource_list'>;
參數說明
function_name:必填。建立的自訂函數名稱。
package_to_class:必填。自訂函數的類,區分大小寫,需要用英文引號(' ')引起來。
Java UDF:此名稱為從頂層包名一直到實現UDF類的類名。
Python UDF:此名稱為Python指令碼名.類名。
說明Python指令碼名為底層唯一標識的資源名。MaxCompute的資源名大小寫不敏感,例如第一次上傳資源時資源名為pyudf_test.py,後續在DataStudio重新命名資源或用MaxCompute用戶端覆蓋資源時將資源名重新命名為PYUDF_TEST.py,此時底層唯一標識的資源名仍然為pyudf_test.py。因此註冊自訂函數時,類名仍然需要填pyudf_test.SampleUDF。您可以通過
list resource;
命令查看所有資源在底層唯一標識的資源名。
resource_list:必填。自訂函數所用到的資源清單。
此資源清單必須包括自訂函數代碼所在的資源,且資源已經上傳至MaxCompute。
如果您的代碼通過Distributed Cache介面讀取資源檔,此列表中還要包括自訂函數所讀取的資源檔列表。
資源清單由多個資源名組成,資源名之間用英文逗號(,)分隔,且資源清單必須用英文引號(' ')引起來。
如果需要指定資源所在的專案,格式為
<project_name>/resources/<resource_name>
。
使用樣本
樣本1:建立函數
my_lower
。假設Java UDF類org.alidata.odps.udf.examples.Lower
在my_lower.jar中。create function my_lower as 'org.alidata.odps.udf.examples.Lower' using 'my_lower.jar';
樣本2:建立函數
my_lower
。假設Python UDF類MyLower在專案test_project
的指令碼pyudf_test.py中。create function my_lower as 'pyudf_test.MyLower' using 'test_project/resources/pyudf_test.py';
樣本3:建立函數
test_udtf
。假設Java UDF類com.aliyun.odps.examples.udf.UDTFResource
是在udtfexample1.jar中,同時該函數還依賴FILE資源file_resource.txt、Table資源table_resource1以及Archive資源test_archive.zip。create function test_udtf as 'com.aliyun.odps.examples.udf.UDTFResource' using 'udtfexample1.jar, file_resource.txt, table_resource1, test_archive.zip';
相關命令
FUNCTION:如果您不需要把SQL語言定義函數存入MaxCompute的Meta系統,可以使用臨時SQL語言定義函數。臨時SQL語言定義函數只在當前指令碼有效。
DELETE FUNCTION:刪除函數。您可以編寫自訂函數並在MaxCompute SQL中使用入口對象的delete_function()方法來刪除函數。
DROP FUNCTION:在MaxCompute專案中登出登入的自訂函數。
DESC FUNCTION:查看MaxCompute專案中指定自訂函數的資訊,包含函數名稱、所有者、建立時間、類名和資源清單資訊。
LIST FUNCTIONS:查看MaxCompute專案中所有自訂函數的資訊。
UPDATE FUNCTION:更新函數。您可以編寫自訂函數並在MaxCompute SQL中對函數調用update方法來更新函數。