创建Doris用户自定义函数
操作场景
MRS 3.6.0-LTS及之后版本,Doris支持使用Java编写UDF、UDAF和UDTF的接口,以方便用户使用Java语言执行自定义函数。本章节以在Doris中创建UDF函数为例进行演示。
Doris UDF介绍
|
UDF分类 |
说明 |
|---|---|
|
UDF(User-Defined Functions) |
自定义标量函数,其输入与输出是一对一的关系,即读入一行数据,写出一条输出值。 |
|
UDAF(User-Defined Aggregating Functions) |
自定义聚合函数,其输入与输出是多对一的关系,即将多条输入记录聚合成一条输出值,可以与SQL中的Group By语句联合使用。 |
|
UDTF(User-Defined Table-Generating Functions) |
自定义表值函数,用来解决一次函数调用输出多行数据场景的,也是唯一一个可以返回多个字段的自定义函数。 |
前提条件
- 已创建包含Doris服务的集群。
- 已安装MySQL客户端,具体操作可参考使用MySQL客户端连接Doris。
创建并使用UDF函数
- 用户根据实际需求开发UDF函数,例如:
package com.huawei.doris.udf; public class MyUDF { public Integer evaluate(Integer value) { return value == null ? null : value + 1; } } - 将开发好的UDF函数编译打包,上传至所有FE和BE节点的相同目录下,例如“${BIGDATA_HOME}/third_lib/doris/udf”,并执行以下命令修改目录和驱动包的属组和权限:
修改属组:
chown omm:wheel -R ${BIGDATA_HOME}/third_lib/doris修改权限:
chmod -R 755 ${BIGDATA_HOME}/third_lib/doris创建UDF时,会对Jar包的路径进行校验,默认路径是“${BIGDATA_HOME}/third_lib/doris/udf”。如果不想使用默认路径,可执行3更换路径。
Doris作业默认使用JDK 21运行,因此建议使用JDK 21编译Doris UDF Jar包,同时兼容JDK 8和JDK 17编译的UDF Jar包。需在UDF样例的“pom.xml”文件的properties中新增“<maven.compiler.target>21</maven.compiler.target>”配置,以指定编译的JDK版本。
- (可选)登录Manager界面,选择“集群 > 服务 > Doris > 配置 > 全部配置 > FE(角色)”,在搜索框中搜索FE的“udf_path”参数,更换成UDF Jar包所在路径。
单击“保存”保存配置。单击“实例”,在实例列表中勾选需要重启的FE实例,选择“更多 > 重启实例”,输入当前用户密码并单击“确定”重启FE实例。
- 登录安装了MySQL的节点,执行以下命令,连接Doris数据库。
若集群已启用Kerberos认证(安全模式),需先执行以下命令再连接Doris数据库:
export LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1
mysql -u数据库登录用户 -p -PFE查询连接端口 -hDoris FE实例IP地址
执行命令后输入数据库登录用户密码。
- Doris FE的查询连接端口,可以通过登录Manager,单击“集群 > 服务 > Doris > 配置”,查询Doris服务的“query_port”参数获取。
- Doris DBalancer的TCP访问端口,可以通过登录Manager,单击“集群 > 服务 > Doris > 配置”,查询Doris服务的“balancer_tcp_port”参数获取。
- Doris FE或DBalancer实例IP地址可通过登录MRS集群的Manager界面,单击“集群 > 服务 > Doris > 实例”,查看任一FE或DBalancer实例的业务IP地址。
- 用户也可以使用MySQL连接软件或者在Doris WebUI界面连接数据库。
- 执行以下命令在目标Doris集群中创建UDF函数:
create function test_function(Integer) returns Integer properties ( "file"="file:${BIGDATA_HOME}/third_lib/doris/udf/doris_udf-1.0-SNAPSHOT.jar", "symbol"="com.huawei.doris.udf.MyUDF", "type"="JAVA_UDF" );其中“file”值为“file:UDF Jar包所在路径”,请根据实际情况修改。
- 在Doris中使用UDF函数:
select test_function(15);图1 使用UDF函数