Hive 使用者自定義函式UDF詳解
本例自定義一個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包。
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檔案放入該資料夾中。
個人推薦這種方法,方便快捷。