在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地址。您可以在实时计算管理控制台目标工作空间详情中查看绑定的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)。