在SQL作業中使用自訂函數,需要先註冊自訂函數(UDF)。本文為您介紹如何註冊、更新和刪除自訂函數。
注意事項
當RAM使用者或RAM角色等其他身份需要進行管理自訂函數(UDF)等相關操作時,請確保其具有目標專案空間的存取權限,詳情請參見專案空間授權。
為了避免JAR包依賴衝突,在開發自訂函數時您需要注意以下幾點:
作業開發頁面選擇的Flink版本,請和Pom依賴中的Flink版本保持一致。
Flink相關依賴,scope請使用provided,即在依賴中添加
<scope>provided</scope>
。其他第三方依賴請採用Shade方式打包,Shade打包詳情請參見Apache Maven Shade Plugin。
說明Flink依賴衝突問題,詳情請參見如何解決Flink依賴衝突問題?。
註冊UDF
全域自訂函數
進入自訂函數註冊入口
單擊目標工作空間操作列下的控制台。
單擊
。單擊左側的函數頁簽。
單擊註冊UDF。
上傳UDF JAR檔案。
您可以通過以下任何一種方式上傳UDF JAR檔案:
上傳檔案:單擊選擇檔案項右側的選擇檔案後,選擇您的目標UDF Artifact檔案。如果有依賴檔案,單擊依賴檔案項右側的選擇檔案,選擇您的目標UDF Artifact所依賴的檔案。
說明您的UDF檔案會被上傳到您選擇的OSS Bucket中的sql-artifacts目錄下。
對於Java類型的UDF,其依賴可以打包到UDF JAR包中,也可以通過依賴檔案項進行上傳;對於Python類型的UDF,其依賴推薦通過的單獨上傳依賴檔案方式上傳。
外部URL:當需要使用其他服務上存在的UDF檔案時,可以使用外部URL功能擷取UDF檔案。
說明僅支援以下兩類外部URL:
開通Flink工作空間時選擇的OSS Bucket地址。您可以在Realtime Compute管理主控台目標工作空間詳情中查看綁定的OSS Bucket。
Realtime ComputeFlink版可以訪問且被允許訪問(公用讀取或被授予許可權)的其他外部儲存系統地址。
單擊確定。
在可用函數頁面,選擇需要註冊的UDF後,單擊建立函數。
Flink開發控制台會解析自訂函數檔案中是否使用了Flink UDF、UDAF和UDTF介面的類,並自動提取類名,填充到Function Name欄位中。註冊成功後,您可以在左側函數列表看到所有註冊成功的UDF,註冊成功的UDF左側會有黃色字型的fx標識。
說明全域自訂函數(Catalog Function)在註冊時,預設使用最新的Flink版本解析。如果您在作業中使用全域自訂函數,同時在作業中選中了非最新的Flink版本,則有可能出現不相容的問題。此時,您可以根據作業需要使用的引擎版本來實現UDF代碼,並通過作業級自訂函數的方式解決此問題。詳情請參見作業級自訂函數。
作業級自訂函數
僅VVR 8.0.3及以上版本支援註冊作業級Python自訂函數。
當使用作業級Python自訂函數時,可以在作業運行參數配置中,通過python.files或者python.archives等參數配置相關依賴檔案。
當使用作業級Python自訂函數時,不支援深度檢查,需要在作業部署時,跳過深度檢查。
作業級自訂函數的註冊流程如下:
上傳自訂函數JAR或Python包。
在左側導覽列檔案管理中,上傳自訂函數JAR或Python包。
在作業中指定作業級自訂函數。
在作業的附加依賴檔案中,指定自訂函數JAR或Python包。
註冊作業級自訂函數。
JAVA自訂函數
CREATE TEMPORARY FUNCTION yourfunctionname;
Python自訂函數
CREATE TEMPORARY FUNCTION yourfunctionname LANGUAGE Python;
更新UDF
如果您的UDF JAR檔案中,新增了UDF或登入了UDF的代碼變更,您可以按照以下步驟更新UDF JAR檔案。
進入自訂函數註冊入口
單擊目標工作空間操作列下的控制台。
單擊
。單擊左側的函數頁簽。
在函數列表中,滑鼠移至上方在目標UDF名稱上,單擊。
上傳UDF JAR檔案。
重要您上傳的新UDF JAR檔案中,必須包含當前已經註冊UDF的所有類,不能出現某個登入UDF的類消失的情況。
只有重啟作業或提交新作業時,才會使用新UDF JAR檔案中的代碼。如果引用該UDF JAR的作業正在運行,則依然會使用舊UDF JAR檔案。
單擊修改。
刪除UDF
在刪除UDF JAR檔案前,請確定其註冊的UDF沒有被作業或SQL檔案引用。
如果您的UDF JAR檔案不再使用,您可以按照以下步驟刪除UDF。
進入自訂函數註冊入口
單擊目標工作空間操作列下的控制台。
單擊
。單擊左側的函數頁簽。
在函數列表中,滑鼠移至上方在目標UDF名稱上,單擊表徵圖。
選中刪除以上所有函數並且刪除關聯的檔案。
如果您要刪除該UDF JAR檔案,則需要刪除該UDF JAR中所有註冊的UDF,避免有髒資料殘留。
單擊確定。
相關文檔
JAR自訂函數的分類、參數傳遞及使用方法及demo,詳情請參見Java和自訂彙總函式(UDAF)。
Python自訂函數的分類、依賴使用、調試、調優和使用方法及demo等資訊,請參見Python和自訂彙總函式(UDAF)。