1. 程式人生 > >Hive 使用者自定義函式UDF詳解

Hive 使用者自定義函式UDF詳解

本例自定義一個Hive UDF函式,功能是將從Hive資料倉庫查詢出來的字串進行大小寫轉換。

第一步,建立java工程,新增jar包。

Ø匯入Hivelib目錄下的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包。

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檔案放入該資料夾中。

個人推薦這種方法,方便快捷。