在SQL作业中使用自定义函数,需要先注册自定义函数(UDF)。本文为您介绍如何注册、更新和删除自定义函数。
注意事项
当RAM用户或RAM角色等其他身份需要进行管理自定义函数(UDF)等相关操作时,请确保其具有目标项目空间的访问权限,详情请参见项目空间授权。
为了避免JAR包依赖冲突,在开发自定义函数时您需要注意以下几点:
作业开发页面选择的Flink版本,请和Pom依赖中的Flink版本保持一致。
Flink相关依赖,scope请使用provided,即在依赖中添加
<scope>provided</scope>
。其他第三方依赖请采用Shade方式打包,Shade打包详情请参见Apache Maven Shade Plugin。
说明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地址。您可以在实时计算管理控制台目标工作空间详情中查看绑定的OSS Bucket。
实时计算Flink版可以访问且被允许访问(公共读或被授予权限)的其他外部存储系统地址。
单击确定。
在可用函数页面,选择需要注册的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)。