1)Hive 自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定义UDF来方便的扩展。
2)当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)。
3)根据用户自定义函数类别分为以下三种:
(1)UDF(User-Defined-Function)
一进一出 ,比如length(),比如trim(),比如ceil()函数
(2)UDAF(User-Defined Aggregation Function)
聚集函数,多进一出
类似于:count/max/min
(3)UDTF(User-Defined Table-Generating Functions)
一进多出
如lateral view explore()
4)官方文档地址
https://cwiki.apache.org/confluence/display/Hive/HivePlugins
5)详细步骤
(1)创建一个maven函数
导入依赖:
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec -->
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>1.2.1</version>
</dependency>
</dependencies>
(2)新建一个类继承org.apache.hadoop.hive.ql.UDF
package com;
import org.apache.hadoop.hive.ql.exec.UDF;
public class userDefinedFunction extends UDF {
//重载
public String evaluate(String input){
return input.toLowerCase();//将大写字母转换成小写
}
public int evaluate(int a,int b){
return a+b名,‘hive.udf.UDFFunc’为自定义方法的全类路径;//计算两个数之和
}
}
(3)打包上传到服务器(我放到了/usr/lcoal/hive下,jar名称为day1111udf.jar)
(4)在hive命令窗口下执行命令
添加jar包:hive (default)> add jar /usr/local/hive/day1111udf.jar;
(5)创建function
语法:create [temporary] function [dbname.]function_name AS class_name;
执行:hive (default)> create temporary function udffunc as 'com.userDefinedFunction';
//temporary表示为临时方法,当会话结束后失效;udffunc为hive中定义的函数名 'com.userDefinedFunction'是自定义方法的全类路径
(6)使用测试
执行:hive (default)> select udffunc(2,3) from dept;
执行:hive (default)> select udffunc('ABC') from dept;
(7)删除函数方法
执行:hive (default)> drop temporary function if exists udffunc;