虽然Hive已经提供了很多内置的函数,比如count()、sum(),但是还是不能满足用户的需求,因此提供了自定义函数供用户自己开发函数来满足自己的需求。
一、自定义函数分类
- UDF(User-Defined-Function)用户自定义函数,输入一个数据然后产生一个数据;
- UDAF(User-Defined Aggregation Function)用户自定义聚合函数,多个输入数据然后产生一个输出参数;
- UDTF(User-Defined Table-generating Function)用户自定义表生成函数,输入一行数据生成N行数据
接下来,我们将编写自己的UDF,实现通过一个人的出生日期,计算其所属的星座。
二、自定义函数流程
要想在Hive中完成自定义函数的操作,要按照如下的流程进行操作:
1、自定义Java类并继承org.apache.hadoop.hive.ql.exec.UDF;
2、覆写evaluate函数,evaluate函数支持重载;
3、把程序打包放到hive所在服务器;
4、进入hive客户端,添加jar包;
5、创建关联到Java类的Hive函数;
6、Hive命令行中执行查询语句:select id, 方法名(name) from 表名——得出自定义函数输出的结果。
三、自定义函数实现
1、创建java类
新建java工程,导入项目依赖包hive-exec-x.x.x.jar,创建类UDFDemo如下:
package cn.hust.book.bigdata;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF;
@Description(name="UDFDemo", value="_FUNC_(date)-from the input date string"+"or separate month and day arguments,returns the sign of