Hive 之自定义函数

当 Hive 提供的内置函数无法满足实际的业务处理需要时,可以考虑使用用户自定义函数进行扩展。用户自定义函数分为以下三类:

  • UDF(User Defined Function)。用户自定义函数,一进一出
  • UDAF(User Defined Aggregation Function)。用户自定义聚集函数,多进一出;类似于:count/max/min
  • UDTF(User Defined Table-Generating Functions)。用户自定义表生成函数,一进多出;类似于:explode

UDF开发:

  • 继承org.apache.hadoop.hive.ql.exec.UDF
  • 需要实现evaluate函数;evaluate函数支持重载
  • UDF必须要有返回类型,可以返回null,但是返回类型不能为void

UDF开发步骤

  • 创建maven java 工程,添加依赖
  • 开发java类继承UDF,实现evaluate 方法
  • 将项目打包上传服务器
  • 添加开发的jar包
  • 设置函数与自定义函数关联
  • 使用自定义函数

扩展系统 nvl 函数功能:

-- 系统内建的 nvl 函数
nvl(ename, "OK"): ename==null => 返回第二个参数
-- 要实现的函数功能
nvl(ename, "OK"): ename==null or ename=="" or ename==" " =>
返回第二个参数

1、创建maven java 工程,添加依赖

<!-- pom.xml 文件 -->
<dependencies>
	<dependency>
		<groupId>org.apache.hive</groupId>
		<artifactId>hive-exec</artifactId>
		<version>2.3.7</version>
	</dependency>
</dependencies>

2、开发java类继承UDF,实现evaluate 方法

package cn.lagou.hive.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public class nvl extends UDF {
	public Text evaluate(final Text t, final Text x) {
		if (t == null || t.toString().trim().length()==0) {
		   return x;
		}
	    return t;
	}
}

3、将项目打包上传服务器
添加开发的jar包(在Hive命令行中)

add jar /home/hadoop/hiveudf.jar;

4、创建临时函数。指定类名一定要完整的路径,即包名加类名

create temporary function mynvl as "cn.lagou.hive.udf.nvl";

5、执行查询

select mynvl("", "OK");
select mynvl(" ", "OK");

创建永久函数:
1、将jar上传HDFS
2、在Hive命令行中创建永久函数

create function mynvl1 as 'cn.lagou.hive.udf.nvl' using jar
'hdfs:/user/hadoop/jar/hiveudf.jar';
-- 查询所有的函数,发现 mynvl1 在列表中
show functions;


--删除永久函数
drop function mynvl1;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值