步骤如下:
1,导入依赖
<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>
2.创建一个类
package com.isea;
import org.apache.hadoop.hive.ql.exec.UDF;
public class HiveUDF extends UDF {
public String evaluate(final String s){
if (s == null){
return null;
}
return s.toLowerCase();
}
}
将该程序打为jar包
3.打成jar包上传到服务器/opt/module/hive/下
[isea@hadoop108 ~]$ cd /opt/module/hive/
[isea@hadoop108 hive]$ ll
*
-rw-rw-r--. 1 isea isea 2104 12月 3 02:21 hive_udf-1.0-SNAPSHOT.jar
*
4.将jar包添加到hive的classpath
> add jar /opt/module/hive/hive_udf-1.0-SNAPSHOT.jar;
5.创建临时函数与开发好的java class关联,这里要写类的全路径
> create temporary function mylower as "com.isea.HiveUDF";
先看看我们的原始数据
0: jdbc:hive2://hadoop108:10000> select * from emp;
+------------+------------+------------+----------+---------------+----------+-----------+-------------+--+
| emp.empno | emp.ename | emp.job | emp.mgr | emp.hiredata | emp.sal | emp.comm | emp.deptno |
+------------+------------+------------+----------+---------------+----------+-----------+-------------+--+
| 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.0 | NULL | 20 |
| 7499 | ALLEN | SALESMAN | 7698 | 1981-2-20 | 1600.0 | 300.0 | 30 |
| 7521 | WARD | SALESMAN | 7698 | 1981-2-22 | 1250.0 | 500.0 | 30 |
| 7566 | JONES | MANAGER | 7839 | 1981-4-2 | 2975.0 | NULL | 20 |
| 7654 | MARTIN | SALESMAN | 7698 | 1981-9-28 | 1250.0 | 1400.0 | 30 |
| 7698 | BLAKE | MANAGER | 7839 | 1981-5-1 | 2850.0 | NULL | 30 |
| 7782 | CLARK | MANAGER | 7839 | 1981-6-9 | 2450.0 | NULL | 10 |
| 7788 | SCOTT | ANALYST | 7566 | 1987-4-19 | 3000.0 | NULL | 20 |
| 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000.0 | NULL | 10 |
| 7844 | TURNER | SALESMAN | 7698 | 1981-9-8 | 1500.0 | 0.0 | 30 |
| 7876 | ADAMS | CLERK | 7788 | 1987-5-23 | 1100.0 | NULL | 20 |
| 7900 | JAMES | CLERK | 7698 | 1981-12-3 | 950.0 | NULL | 30 |
| 7902 | FORD | ANALYST | 7566 | 1981-12-3 | 3000.0 | NULL | 20 |
| 7934 | MILLER | CLERK | 7782 | 1982-1-23 | 1300.0 | NULL | 10 |
+------------+------------+------------+----------+---------------+----------+-----------+-------------+--+
将上表中的数据改写成对应的大写的英文转为小写
7.即可在hql中使用自定义的函数strip
> select ename, mylower(ename) lowername from emp;
+---------+------------+--+
| ename | lowername |
+---------+------------+--+
| SMITH | smith |
| ALLEN | allen |
| WARD | ward |
| JONES | jones |
| MARTIN | martin |
| BLAKE | blake |
| CLARK | clark |
| SCOTT | scott |
| KING | king |
| TURNER | turner |
| ADAMS | adams |
| JAMES | james |
| FORD | ford |
| MILLER | miller |
+---------+------------+--+