管理自定义函数(UDF)
本文为您介绍如何管理Flink全托管自定义函数(UDF),包括注册、更新和删除。
前提条件
其他阿里云账号或RAM用户共同使用Flink全托管产品时,需要为阿里云账号或RAM用户授权,以进行管理自定义函数(UDF)等相关操作,详情请参见作业操作账号授权。
注意事项
为了避免JAR包依赖冲突,在开发自定义函数时您需要注意以下几点:
作业开发页面选择的Flink版本,请和Pom依赖中的Flink版本保持一致。
Flink相关依赖,scope请使用provided,即在依赖中添加
<scope>provided</scope>
。其他第三方依赖请采用Shade方式打包,Shade打包详情请参见Apache Maven Shade Plugin。
Flink依赖冲突问题,详情请参见如何解决Flink依赖冲突问题?。
注册UDF
如果您的SQL需要使用UDF,您需要先注册您的UDF,才能在SQL中使用。
登录实时计算控制台。
在Flink全托管页签,单击目标工作空间操作列下的控制台。
单击SQL开发。
单击左侧的函数页签。
单击注册UDF。
上传UDF JAR文件。
您可以通过以下任何一种方式上传UDF JAR文件:
上传文件:单击选择文件项右侧的选择文件后,选择您的目标UDF Artifact文件。如果有依赖文件,单击依赖文件项右侧的选择文件,选择您的目标UDF Artifact所依赖的文件。
说明您的UDF JAR文件会被上传到您选择的OSS Bucket中的sql-artifacts目录下。此外,Flink开发控制台会解析您UDF JAR文件中是否使用了Flink UDF、UDAF和UDTF接口的类,并自动提取类名,填充到Function Name字段中。
对于Java类型的UDF,其依赖可以打包到UDF JAR包中,也可以通过依赖文件项进行上传;对于Python类型的UDF,其依赖推荐通过的单独上传依赖文件方式上传。
外部URL:当JAR文件超过200 MB或者需要使用其他服务上存在的JAR文件时,可以使用外部URL功能获取JAR文件。
说明当您JAR文件超过200 MB,可以将自定义Catalog文件放在实时计算Flink全托管绑定的OSS Bucket的
sql-artifacts/namespaces/{namespace}
目录下,再使用该文件的HTTPS路径即可。在使用其他服务的HTTP路径时,需要该服务和实时计算Flink全托管在同一VPC下或者先打通实时计算Flink全托管和目标服务的公网网络后,使用公网地址,详情请参见Flink全托管集群如何访问公网?。
单击确定。
在可用函数页面,选择需要注册的UDF后,单击创建函数。
在SQL编辑器页面左侧函数列表,您可以看到所有注册成功的UDF。
更新UDF
如果您的UDF JAR文件中,新增了UDF或已注册了UDF的代码变更,您可以按照以下步骤更新UDF JAR文件。
登录实时计算控制台。
在Flink全托管页签,单击目标工作空间操作列下的控制台。
单击SQL开发。
单击左侧的函数页签。
在函数列表中,鼠标悬停在目标UDF名称上,单击
。
上传UDF JAR文件。
您可以通过以下任何一种方式上传UDF JAR文件:
上传文件:单击选择文件项右侧的选择文件后,选择您的目标UDF Artifact文件。如果有依赖文件,单击依赖文件项右侧的选择文件,选择您的目标UDF Artifact所依赖的文件。
外部URL:输入外部URL地址。
重要您上传的新UDF JAR文件中,必须包含当前已经注册UDF的所有类,不能出现某个已注册UDF的类消失的情况。
只有重启作业或提交新作业时,才会使用新UDF JAR文件中的代码。如果引用该UDF JAR的作业正在运行,则依然会使用旧UDF JAR文件。
单击修改。
删除UDF
如果您的UDF JAR文件不再使用,您可以按照以下步骤删除UDF。
登录实时计算控制台。
在Flink全托管页签,单击目标工作空间操作列下的控制台。
单击SQL开发。
单击左侧的函数页签。
在函数列表中,鼠标悬停在目标UDF名称上,单击
图标。
说明在删除UDF JAR文件前,请确定其注册的UDF没有被作业或SQL文件引用。
选中删除以上所有函数并且删除关联的文件。
如果您要删除该UDF JAR文件,则需要删除该UDF JAR中所有注册的UDF,避免有脏数据残留。
单击确定。