Hive实现自定义函数(临时函数和永久函数)
2020-06-16 本文已影响0人
Yobhel
关于HIVE实现自定义函数,步骤主要可分为:
- 继承org.apache.hadoop.hive.ql.exec.UDF
- 重写evaluate()方法
- 打包jar
- 添加jar包
- 使用自定义函数
下面是具体实现,包括自定义临时函数和自定义永久函数
编写自定义函数
public class AddPrefix extends UDF {
/**
* 这里我们实现将任一输入添加自定义前缀信息
*/
public String evaluate(String str) {
return "HIVE UDF Prefix:"+ str;
}
}
打包jar,进入HIVE客户端,引入相关jar包
- 这里以自定义临时函数为例
--添加jar包
hive> add jar /usr/wh/addPrefix.jar;
--创建自定义临时函数
hive> create temporary function add_prefix as 'com.test.AddPrefix';
--使用自定义临时函数
hive> select add_prefix('aa');
HIVE UDF Prefix:aa
hive> select add_prefix(1);
HIVE UDF Prefix:1
--这里我们切换数据库依然可以正常使用。为了便于观察,我们打开数据库显示。
hive> set hive.cli.print.current.db=true;
hive (test)> select add_prefix('aa');
HIVE UDF Prefix:aa
hive (test)> use tmp;
hive (tmp)> select add_prefix('aa');
HIVE UDF Prefix:aa
--销毁自定义临时函数
hive (test)> drop temporary function add_prefix;
--需要注意的是,一旦退出HIVE客户端,自定义临时函数即被销毁。
- 如果需要使用自定义永久函数,可以先上传到HDFS。
[root@nd2 wh]# hadoop fs -put addPrefix.jar /wh/test/
[root@nd2 wh]# hadoop fs -ls /wh/test
Found 1 items
-rw-r--r-- 3 root supergroup 699 2019-05-22 14:03 /wh/test/addPrefix.jar
- 下面是简单使用
--创建永久函数
create function add_prefix
as 'com.test.AddPrefix'
using jar 'hdfs:///wh/test/addPrefix.jar'
--与自定义临时函数不同,使用永久函数只能在当前数据库
--这里我们放在test库,如果在其它库执行,会报错
hive (test)> select add_prefix('aa');
HIVE UDF Prefix:aa
hive> use tmp;
hive (tmp)> select add_prefix('aa');
FAILED: SemanticException [Error 10011]: Invalid function add_prefix
--销毁自定义永久函数
hive (test)> drop function add_prefix;