更新时间:2022-08-12 GMT+08:00

DLI使用UDF操作指导

DLI支持用户使用Hive UDF(User Defined Function,用户定义函数)进行数据查询等操作。

使用UDF操作步骤

  1. 编写UDF。
    1. 在pom文件中添加以下配置信息。
      <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-exec</artifactId>
            <version>1.2.1</version>
      </dependency>
    2. 代码中需要添加导入:import org.apache.hadoop.hive.ql.exec.UDF;
    3. 根据业务需要新建或修改样例代码中SumUdfDemo.java的内容。
  2. 生成jar包。使用“mvn package”命令编译打包程序,生成所需的Jar包。
    例如,使用IDEA工具编写好程序代码后,单击工具界面最下方的“Terminal”,在命令行窗口输入“mvn package”编译打包程序。
    图1 编译打包程序

    根据编译结果提示,在对应的路径下获取生成的jar包文件,例如TestUDF.ja

  3. 上传TestUDF.jar至OBS上。上传数据至OBS可参考创建并提交Spark SQL作业中“步骤2:上传数据至OBS”。
  4. 将TestUDF.jar上传到DLI的程序包管理中,方便后续统一管理。
    1. 登录DLI管理控制台,单击“数据管理 > 程序包管理”。
    2. 在“程序包管理”页面,单击右上角的“创建”创建程序包。
    3. 在“创建程序包”对话框,配置以下参数。
      1. 包类型:选择“JAR”。
      2. OBS路径:3中程序包所在的OBS路径。
      3. 分组设置和组名称根据情况选择设置,方便后续识别和管理程序包。
    4. 单击“确定”,完成创建程序包。
  5. 创建Function。

    在DLI Console上输入下列命令创建Function:

    CREATE FUNCTION fun1 AS 'com.demo.SumUdfDemo' using jar 'obs://udf/TestUDF.jar';
  6. 重启原有SQL队列,使得创建的Function生效。
    1. 登录数据湖探索管理控制台,选择“资源管理 > 队列管理”,在对应“SQL队列”类型作业的“操作”列,单击“重启”。
    2. 在“重启队列”界面,选择“确定”完成队列重启。
  7. 使用Function。

    在查询语句中使用5中创建的Function:

    select fun1(ip) from ip_tables;
  8. 删除Function。

    如果不再使用该Function,可执行以下语句删除Function:

    Drop FUNCTION fun1;

样例代码

SumUdfDemo.java中的样例代码如下所示:

package com.demo;
  import org.apache.hadoop.hive.ql.exec.UDF;
  public class SumUdfDemo extends UDF {
    public Int evaluate(Int a, Int b) {
     return a + b;
  }
 }