自定义函数
和MySQL一样的hive也为我们内置啦很多函数,比如sum,max,min等。但是有些时候这些内置函数不足以满足我们的需求,需要我们自定义函数去满足实际的业务需求。
直接来一个案例
现在有一份学生表如下
我们需要在每一个学生姓名前面加上字符串”小杨同学“,使用自定义函数
1,导入依赖
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>3.1.2</version>
</dependency>
2,继承UDF类
public class HelloUdf extends UDF {
public String evaluate (String name) {
if (name == null) return null;
return "小杨同学:" + name;
}
}
3,重写evaluate方法
public class HelloUdf extends UDF {
public String evaluate (String name) {
if (name == null) return null;
return "小杨同学:" + name;
}
}
注意evaluate不能拼错或者自定义名称,血泪教训哈
打包上传至hive节点上的指定路径下
如
/root/awz/soft/hive/cusjar/cushive-1.0-SNAPSHOT.jar
这个可以自定义但是要知道并记住
4,将jar包添加至hive的classpath
add jar /root/awz/soft/hive/cusjar/cushive-1.0-SNAPSHOT.jar;
5,创建临时函数与开发好的Java class关联
create temporary function name as "cn.awz.HelloUdf";
注意:这里是零时函数,当你关闭当前的hive窗口后,函数就消失。
也可以创建永久函数
create function name as "cn.awz.HelloUdf";
6,在hql中使用自定义函数
select name(name) from student;
上面我们只是自定义啦一个UDF函数,他的特点是一进一出
当然啦我们还有UDAF函数,多进一出,
UDTF函数,一进多出