系统内置函数
-
查看系统自带的函数:
show functions;
-
显示自带的函数的用法:
desc functions upper;
-
详细显示自带的函数的用法:
desc function extended upper;
日期处理函数
-
date_format(根据格式整理日期)
示例:
select date_format('2019-02-10','yyyy-MM'); //2019-09
-
date_add(加减日期)
示例:
select date_add('2019-02-10',-1); //2019-02-09
select date_add('2019-02-10',1); //2019-02-11
-
next_day
示例:
取当前周的周一:select date_add(next_day('2019-02-12','MO'),-7);
取当前天的下一个周一:select next_day('2019-02-12','MO');
-
last_day(求当月最后一天日期)
示例:
select last_day('2019-02-10'); //2019-02-28
自定义函数
- Hive 自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定义UDF来方便的扩展
- 当Hive提供的内置函数无法满足业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)
- 根据用户自定义函数类别分为以下三种
- UDF(User-Defined-Function):一进一出
- UDTF (User-Defined Table-Generating Functions):一进多出,如lateral view explore()
- UDAF(User-Defined Aggregation Function): 聚集函数,多进一出,类似于: count/max/min…
- 官方文档地址:https://cwiki.apache.org/confluence/display/Hive/HivePlugins
- 编程步骤:
- 继承org.apache.hadoop.hive.ql.UDF
- 需要实现evaluate函数;evaluate函数支持重载
- 在hive的命令行窗口创建函数
- 添加jar:add jar linux_jar_path
- 创建function:create [temporary] function [dbname.]function_name AS
class_name; - 在hive的命令行窗口删除函数:
Drop [temporary] function [if exists] [dbname.]function_name;
- 注意事项:
UDF必须要有返回类型,可以返回null,但是返回类型不能为void
自定义UDF函数
-
创建一个Maven工程Hive
-
导入依赖:
<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>
-
创建一个类继承UDF接口
public class Lower extends UDF { public String evaluate (final String s) { if (s == null) return null; return s.toLowerCase(); } }
-
打成jar包上传到服务器/opt/module/jars/udf.jar
-
将jar包添加到hive的classpath:
add jar /opt/module/datas/udf.jar;
-
创建临时函数与开发好的java class关联
create temporary function mylower as "com.atguigu.hive.Lower";
-
在hql中使用自定义的函数:
select ename, mylower(ename) lowername from emp;