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;