在 SQL 作业中使用自定义函数,需要先注册自定义函数(UDF)。本文为您介绍如何注册、更新和删除自定义函数。
注意事项
为了避免 JAR 包依赖冲突,在开发自定义函数时您需要注意以下几点:
作业开发页面选择的Flink版本,请和 POM 依赖中的 Flink 版本保持一致。
Flink 相关依赖,scope 请使用 provided,即在依赖中添加 <scope>provided</scope>。
其他第三方依赖请采用 Shade 方式打包,Shade 打包详情请参见Apache Maven Shade Plugin。
注册 UDF
1. 进入自定义函数注册入口。
1.1 登录 流计算 Oceanus 控制台
1.2 选择进入目标工作空间,在作业管理中,创建 SQL 作业,可参考 创建 SQL 作业。
1.3 切换到开发调试,在左侧的函数管理界面操作。

2. 单击注册 UDF。
3. 上传 UDF JAR 文件。

您可以通过以下任何一种方式上传 UDF JAR 文件:
上传文件:单击选择文件项右侧的选择文件后,选择您的目标 UDF Artifact 文件。如果有依赖文件,单击依赖文件项右侧的选择文件,选择您的目标 UDF Artifact 所依赖的文件。
说明:
对于 Java 类型的 UDF,其依赖可以打包到 UDF JAR 包中,也可以通过依赖文件项进行上传。
依赖文件:当需要使用依赖管理上存在的 JAR 文件时,可以依赖文功能获取 UDF 文件。
外部 URL:当需要使用其他服务上存在的 UDF 文件时,可以使用外部URL功能获取 UDF 文件。
说明:
开通 Oceanus 时选择的 COS Bucket 地址。您可以在实时计算管理控制台集群详情中查看绑定的 COS Bucket。
实时计算 Flink 版可以访问且被允许访问(公共读或被授予权限)的其他外部存储系统地址。
4. 单击确定。
5. 在可用函数页面,选择需要注册的 UDF 后,单击创建函数。
Flink 开发控制台会解析自定义函数文件中是否使用了 Flink UDF、UDAF 和 UDTF 接口的类,并自动提取类名,填充到 Function Name 字段中。注册成功后,您可以在左侧函数列表看到所有注册成功的 UDF,注册成功的 UDF 左侧会有绿色字体的 Fx 标识。

更新 UDF
如果您的 UDF JAR 文件中,新增了 UDF 或已注册了 UDF 的代码变更,您可以按照以下步骤更新 UDF JAR 文件。
1. 进入自定义函数注册入口。
1.1 登录 流计算 Oceanus 控制台。
1.2 选择进入目标工作空间,在作业管理中,单击一个SQL作业。
1.3 切换到开发调试,在左侧的函数管理界面操作。
2. 在函数管理列表中,鼠标悬停在目标UDF名称上,单击更新。

注意:
您上传的新 UDF JAR 文件中,必须包含当前已经注册 UDF 的所有类,不能出现某个已注册 UDF 的类消失的情况。
只有重启作业或提交新作业时,才会使用新 UDF JAR 文件中的代码。如果引用该 UDF JAR的作业正在运行,则依然会使用旧 UDF JAR 文件。
删除 UDF
说明:
在删除 UDF JAR 文件前,请确定其注册的 UDF 没有被 SQL 作业引用。
如果您的 UDF JAR 文件不再使用,您可以按照以下步骤删除 UDF。
1. 进入自定义函数注册入口。
1.1 登录 流计算 Oceanus 控制台。
1.2 选择进入目标工作空间,在作业管理中,单击一个 SQL 作业。
1.3 切换到开发调试,在左侧的函数管理界面操作。
2. 在函数管理列表中,鼠标悬停在目标UDF名称上,单击删除。

3. 选中删除以上所有函数并且删除关联的文件。如果您要删除该 UDF JAR 文件,则需要删除该 UDF JAR 中所有注册的 UDF,避免有脏数据残留。
4. 单击确定删除。