4.Hive函数
4.1 内置运算符
内容较多,见《Hive官方文档》
4.2 内置函数
内容较多,见《Hive官方文档》
/confluence/display/Hive/LanguageManual+UDF
测试各种内置函数的快捷方法:
1、创建一个dual表
create table dual(id string);
2、load一个文件(一行,一个空格)到dual表
hive> load data local inpath'/home/tuzq/software/hivedata/dual.txt' into table dual;
其中dual.txt里面只是一个空格
3、select substr('angelababy',2,3) from dual;
4.3 Hive自定义函数和Transform
当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)。
4.3.1 自定义函数类别
UDF 作用于单个数据行,产生一个数据行作为输出。(数学函数,字符串函数)
UDAF(用户定义聚集函数):接收多个输入数据行,并产生一个输出数据行。(count,max)
4.3.2 UDF开发实例
l 简单UDF示例
前期准备,要把hive的lib包导入到工程中,其中UDF依赖的是hive-exec-1.2.1.jar。也就是说要把apache-hive-1.2.1-bin\lib中内容都引入到工程中。若用到hadoop中的一些api,请把hadoop的api也引入进去。
1、先开发一个java类,继承UDF,并重载evaluate方法
2、打成jar包上传到服务器
3、将jar包添加到hive的classpath
4、hive> add jar /home/tuzq/software/hivedata/udf.jar;
Added [/home/tuzq/software/hivedata/udf.jar] to class path
Added resources: [/home/tuzq/software/hivedata/udf.jar]
5、hive>创建临时函数与开发好的java class关联
5、即可在hql中使用自定义的函数tolowercase ip
l Json数据解析UDF开发
作业:
有原始json数据如下:
需要将数据导入到hive数据仓库中
我不管你中间用几个表,最终我要得到一个结果表:
注:全在hive中完成,可以用自定义函数
4.3.3 Transform实现
Hive的 TRANSFORM 关键字提供了在SQL中调用自写脚本的功能
适合实现Hive中没有的功能又不想写UDF的情况
使用示例1:下面这句sql就是借用了weekday_mapper.py对数据进行了处理.
其中weekday_mapper.py内容如下