UDF(User Defined Function)又称:用户自定义函数。可以像 concat, substr那样的 hive 内置的函数一样直接用于 select 语句,简化复杂查询。
编写 UDF 其实就是写一个类继承 org.apache.hadoop.hive.ql.exec.UDF
该类,在类里面写一个名为 evaluate
的方法,在方法里写相应的业务逻辑,最后打成 jar 包,提交到服务器上,在 hive 的命令行模式下添加这个 jar 包到环境变量,使用里面写好的 evaluate
方法。
编写 UDF 基本步骤
- 所需 pom 文件如下:
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>2.3.0</version>
</dependency>
- 继承 org.apache.hadoop.hive.ql.exec.UDF ,重写 evaluate 方法:
package udf;
import org.apache.hadoop.hive.ql.exec.UDF;
/**
* 用于判断员工薪水级别的函数
*/
public class CheckSalaryGrade extends UDF {
public String evaluate(String salary) {
// 判断薪水的级别
int sal = Integer.parseInt(salary.trim());
if (sal < 1000) {
return "Grade C";
} else if (sal < 3000) {
return "Grade B";
} else {
return "Grade A";
}
}
}
- 打成 jar 包,提交到服务器上:
- 执行
hive
命令,启动 hive 的命令行模式 - 添加 jar 包:
- 创建临时函数:
create temporary function checksalary as "udf.CheckSalaryGrade";
- 使用 UDF 执行查询:
select ename, sal, checksalary(sal) from emp;
- 销毁临时函数:
drop temporary function checksalary;