hive添加自定义函数

hive添加自定义函数方式有两种,一种是继承UDF ,另一种继承GenericUDF

UDF开发较为方便,先新版本中已被弃用,建议使用GenericUDF   org.apache.hadoop.hive.ql.exec.UDF

GenericUDF开发更加灵活,但也增加了复杂成本    org.apache.hadoop.hive.ql.udf.generic.GenericUDF

 

以下以,UDF开发演示自定义函数的,整体过程:

1.新建maven工程,添加如下依赖

 

<dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-exec</artifactId>
    <version>3.1.2</version>
</dependency>

 

如添加判断是否为空自定义函数,代码如下:

package com.bigdata.hive.udf;
import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF;
import java.util.regex.Pattern;
/**
 * 自定义UDF函数
 * 输入:Tom
 * 输出:hello:Tom
 */
@Description(
        name = "udf_is_null",
        value = "_FUNC_(str) - Returns str is null?0:1",
        extended = "Example:\n  > SELECT _FUNC_(\'Facebook\') FROM src LIMIT 1;\n   return    1 "
)
public class UdfIsNull extends UDF {
    public int evaluate(final String s) {
        if (s == null  || s.toString().trim().toLowerCase().equals("null") || Pattern.matches("\\s+",s.toString())||s.toString().trim().equals("")) {
            return 0;
        }
        return 1;
    }
    public static void main(String[] args) {
        System.out.println("值为"+new UdfIsNull().evaluate(new String("null"  )));
    }
}

方式一:添加临时函数(仅当前会话有效)

a)将jar上传至服务器,进入hive,执行: add jar /root/jar/hive_function-1.0-SNAPSHOT.jar;

b)执行命令,添加临时函数:create temporary function udf_is_null as 'com.bigdata.hive.udf.UdfIsNull';

c)查看函数 desc function udf_is_null;

d)测试函数: select udf_is_null(“”);

 

方式二:添加永久函数(永久函数,创建后可以在任意客户端使用)

a)jar上传至hdfs文件系统:hdfs dfs -put ./hive_function-1.0-SNAPSHOT.jar /libs

 

b)进入hive,创建函数

create function udf_is_null

as 'com.bigdata.hive.udf.UdfIsNull'

using jar 'hdfs:///libs/hive_function-1.0-SNAPSHOT.jar'

 

 

posted @ 2021-06-19 10:21  nohert  阅读(902)  评论(0编辑  收藏  举报