函数
系统内置函数
- 查看系统自带的函数
1 | hive> show functions; |
- 显示自带的函数的用法
1 | hive> desc function upper; |
- 详细显示自带的函数的用法
1 | hive> desc function extended upper; |
自定义函数
- Hive 自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定义UDF来方便的扩展。
- 当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)。
- 根据用户自定义函数类别分为以下三种:
- UDF(User-Defined-Function):一进一出
- UDAF(User-Defined Aggregation Function):聚集函数,多进一出,类似于:count/max/min
- UDTF(User-Defined Table-Generating Functions):一进多出,如lateral view explore()
- 继承org.apache.hadoop.hive.ql.UDF
- 需要实现evaluate函数;evaluate函数支持重载;
- 在hive的命令行窗口创建函数
1 | 添加jar |
- 在hive的命令行窗口删除函数
1 | Drop [temporary] function [if exists] [dbname.]function_name; |
- 注意:UDF必须要有返回类型,可以返回null,但是返回类型不能为void;
自定义UDF函数
- 创建一个Maven工程Hive
- 导入依赖
1 | <dependencies> |
- 创建一个类
1 | package com.rickyin; |
- 打成jar包上传到服务器/opt/module/jars/udf.jar
- 将jar包添加到hive的classpath
1 | hive (default)> add jar /opt/module/datas/udf.jar; |
- 创建临时函数与开发好的java class关联
1 | hive (default)> create temporary function mylower as "com.atguigu.hive.Lower"; |
- 即可在hql中使用自定义的函数strip
1 | hive (default)> select ename, mylower(ename) lowername from emp; |
自定义UDTF函数
- 需求说明:自定义一个UDTF实现一个任意分割符的字符串切割成独立的单词,例如:
1 | Line:"hello,world,hadoop,hive" |
- 代码实现
1 | package com.rickyin.udtf; |