Hive进阶之UDF开发(Java版)

以下演示如何使用Java编写Hive UDF。

添加依赖

JUnit

<dependency>
    <groupId>junitgroupId>
    <artifactId>junitartifactId>
    <version>4.13version>
    <scope>testscope>
dependency>

Hive

<dependency>
    <groupId>org.apache.hivegroupId>
    <artifactId>hive-execartifactId>
    <version>2.0.1version>
dependency>

代码实现

单独一个class,需要继承UDF,再添加一个特定的方法evaluate,入参可以为多个,出来推荐一个简单的类型,比如String, Integer

import org.apache.hadoop.hive.ql.exec.UDF;

public class UdfDemo extends UDF {

    public String evaluate(int year, int month, int day) {
        return String.format("%d-%02d-%02d", year, month, day);
    }
}

单元测试

import org.junit.Before;
import org.junit.Test;

public class UdfDemoTest {

    private UdfDemo udfDemo;

    @Before
    public void init() {
        udfDemo = new UdfDemo();
    }

    @Test
    public void evaluate() {
        System.out.println(udfDemo.evaluate(2020, 8, 20));
    }
}

输出结果

2020-08-20

打包

mvn clean package

这里会生成一个jar包:udf-demo-1.0.jar;后面我们会用到。

在SQL中使用

通过add jar命令设置UDF文件的路径,可以是绝对路径,它也可以是相对路径。

add jar './udf-demo-1.0.jar';

create temporary function udf_demo as 'com.domain.tech.test.udf.UdfDemo';

select udf_demo(2020, 10, 1);

输出结果

2020-10-01

你可能感兴趣的:(Hive,Java)