本例自定义一个Hive UDF函数,功能是将从Hive数据仓库查询出来的字符串进行大小写转换。
第一步,创建java工程,添加jar包。
Ø导入Hive的lib目录下的jar包以及hadoop安装目录下的hadoop-core.jar
第二步,新建package包,包中新建java类,该类一定要继承org.apache.hadoop.hive.ql.exec.UDF类。
第三步,在继承了UDF类中实现evaluate函数,函数名必须是evaluate,可以重载多个evaluate方法。
如下图,evaluate函数第一个参数t对应着从数据库查询出来的某列的数据,第二个参数up_or_lower是依据函数的逻辑让用户在调用时指定的。
第四步,export jar包,直接从eclipse工具中导出jar包,这步简单。
第五步,将jar包添加到linux操作系统下的文件系统中(我是在windows7中用eclipse创建java工程和导出jar包的,所以我使用了winscp工具(点击下载)从windows文件系统将jar包传送到linux文件系统,如果本身就是在linux系统下编写的java工程,就用不着这一步了)。
第六步,添加jar包到hive环境中。(三种方式,文末细讲)
第七部,创建临时函数供用户调用。
第八步,在查询语句中调用UDF函数。(六、七、八步如下图)
这里要注意的是如果是通过hive命令添加jar包到hive环境中,当要更新这个jar包时,要退出hive环境,再重新添加jar包。
附:向hive环境添加jar包的三种方法。(这部分转发自:http://www.linuxidc.com/Linux/2013-04/82879.htm)
1. 使用add jar path/test.jar;方法加入
该方法的缺点是每次启动Hive的时候都要从新加入,退出hive就会失效。
2. 通过设置hive的配置文件hive-site.xml 加入
在配置文件中增加配置
<property>
<name>hive.aux.jars.path</name>
<value>file:///jarpath/all_new1.jar,file:///jarpath/all_new2.jar</value>
</property>
保存即可。
该方法比第一种方法方便很多。不需要每次启动Hive执行命令加入,只是配置稍微复杂一些。
3. 在${HIVE_HOME中创建文件夹auxlib ,然后将自定义jar文件放入该文件夹中。
个人推荐这种方法,方便快捷。