更新时间:2025-12-10 GMT+08:00
分享

创建Doris用户自定义函数

操作场景

MRS 3.6.0-LTS及之后版本,Doris支持使用Java编写UDF、UDAF和UDTF的接口,以方便用户使用Java语言执行自定义函数。本章节以在Doris中创建UDF函数为例进行演示。

Doris UDF介绍

表1 Doris UDF介绍

UDF分类

说明

UDF(User-Defined Functions)

自定义标量函数,其输入与输出是一对一的关系,即读入一行数据,写出一条输出值。

UDAF(User-Defined Aggregating Functions)

自定义聚合函数,其输入与输出是多对一的关系,即将多条输入记录聚合成一条输出值,可以与SQL中的Group By语句联合使用。

UDTF(User-Defined Table-Generating Functions)

自定义表值函数,用来解决一次函数调用输出多行数据场景的,也是唯一一个可以返回多个字段的自定义函数。

前提条件

创建并使用UDF函数

  1. 用户根据实际需求开发UDF函数,例如:

    package com.huawei.doris.udf;
    public class MyUDF {
    public Integer evaluate(Integer value) {
    return value == null ? null : value + 1;
    }
    }

  2. 将开发好的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版本。

  3. (可选)登录Manager界面,选择“集群 > 服务 > Doris > 配置 > 全部配置 > FE(角色)”,在搜索框中搜索FE的“udf_path”参数,更换成UDF Jar包所在路径。

    单击“保存”保存配置。单击“实例”,在实例列表中勾选需要重启的FE实例,选择“更多 > 重启实例”,输入当前用户密码并单击“确定”重启FE实例。

  4. 登录安装了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界面连接数据库。

  5. 执行以下命令在目标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包所在路径”,请根据实际情况修改。

  6. 在Doris中使用UDF函数:

    select test_function(15);
    图1 使用UDF函数

相关文档