文章目录
- 1. 系统自带的函数
- 2. 自定义函数
- 2.1 开发自定义函数
- 2.2 测试开发的自定义函数
1. 系统自带的函数
1)查看系统自带的函数
hive> show functions;
2)显示自带的函数的用法
hive> desc function upper;
3)详细显示自带的函数的用法
hive> desc function extended upper;
2. 自定义函数
根据用户自定义函数类别分为以下三种:
- UDF(User-Defined-Function)
一进一出 - UDAF(User-Defined Aggregation Function)
聚集函数,多进一出
类似于:count/max/min - UDTF(User-Defined Table-Generating Functions)
一进多出
如lateral view explode()
2.1 开发自定义函数
pom.xml
<!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec -->
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>3.1.2</version>
</dependency>
Lower.java
package com.during.hive;
import org.apache.hadoop.hive.ql.exec.UDF;
public class Lower extends UDF {
public String evaluate(final String s) {
if (s == null) {
return null;
}
return s.toString().toLowerCase();
}
}
注:
- 需要实现evaluate函数;evaluate函数支持重载;
- UDF必须要有返回类型,可以返回null字符串,但是返回类型不能为void。
2.2 测试开发的自定义函数
- 打包jar上传到服务器/usr/local/hive-3.1.2/test_files/jars/udf.jar。
- 将jar包添加到hive的classpath
hive> add jar /usr/local/hive-3.1.2/test_files/jars/udf.jar;
- 创建临时函数与开发好的java class关联(全类名)
create [temporary] function [dbname.]function_name AS class_name;
hive> create temporary function udf_lower as "com.during.hive.Lower";
- 运行
hive> select ename, udf_lower(ename) lowername from emp;
- 在hive的命令行窗口删除函数
hive> Drop [temporary] function [if exists] [dbname.]function_name;