上一篇我们说到了hive的安装还有一些常规的导入、导出、查询操作。今天我们要讲的是Hive函数的应用,Hive函数分为内置函数和外置函数, 对于一些普通的操作的我们使用内置函数就足够了,如果我们要进行一些复杂操作,就可以使用到我们的外置函数。来看看具体怎么操作吧^ ^
Hive函数
内置函数
在hive中已经提供了一些函数给我们使用,一般是一些字符串、json等一些简单的操作。如下
测试各种内置函数的快捷方法:
1.创建一个dual表
create table dual(id string);
2.load一个文件(一行,一个空格)到dual表
3.select substr('angelababy',2,3) from dual;
hive> select substr('dilireba',0,2) from dual;
OK
di
Time taken: 0.295 seconds, Fetched: 1 row(s)
hive> select substr('dilireba',1,2) from dual;
OK
di
Time taken: 0.177 seconds, Fetched: 1 row(s)

当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)
Hive自定义函数
自定义函数类别
UDF作用域单个数据行,产生一个数据行作为输出作为输出。(数学函数,字符串函数)
UDAF(用户定义聚集函数):接受多个输入行,并产生一个输出数据行。(count,max)
事不宜迟让我们来看看怎么编写一个UDF
UDF开发实例
使用的话就跟使用普通的内置函数一样,这里使用的是自定义的函数,并且还能通过入参的不同调用不同的方法。
如果传入是字符串的话就是大写转小写,如果输入两个数字的话就是求和。
这里为了演示,请忽略下面添加函数时的函数命名。
代码异常简单
添加依赖
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>1.2.1</version>
</dependency>
简单UDF示例步骤
1、先开发一个JAVA类,继承UDF,并重载evaluate方法
public class ToLowerCaseUDF extends UDF{
//重载
public String evaluate(String input){
return input.toLowerCase();//将大写字母转换成小写
}
public int evaluate(int a,int b){
return a+b;//计算两个数之和
}
}
2、打成jar包上传到服务器
3、将jar包添加到hive的classpath
hive>add JAR /home/hadoop/tolowercase.jar;
4、创建临时函数与开发好的java class关联
hive>create temporary function tolowercase as 'com.kris.bigdata.hive.udf.ToLowerCaseUDF';
5、即可在hql中使用自定义的函数
hive> select tolowercase('I AM KRIS') from dual;
OK
i am kris
Time taken: 3.23 seconds, Fetched: 1 row(s)
hive> select tolowercase(1,2) from dual;
OK
3
Time taken: 0.2 seconds, Fetched: 1 row(s)
注意:
打出的jar包记得要排除.SF、.DSA、.RSA文件。
不然会报出错误:java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
打包插件中添加配置:
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>

这就是我们Hive中函数的一些简单应用啦~是不是觉得太过简单了,下一篇将给大家讲讲如何在hive中使用函数解析百万json并插入新的表, 以及hive中使用python脚本。
如果觉得不错的话记得like and commend喔~




