Hive 自定義UDF函數

Hive的SQL可以通過用戶定義的函數(UDF),用戶定義的聚合(UDAF)和用戶定義的表函數(UDTF)進行擴展。

當Hive提供的內置函數無法滿足你的業務處理需要時,此時就可以考慮使用用戶自定義函數(UDF)。

UDF、UDAF、UDTF的區別:

UDF(User-Defined-Function)一進一出

UDAF(User-Defined Aggregation Funcation)聚集函數,多進一出

UDTF(User-Defined Table-Generating Functions)一進多出,如lateral view explore()

用戶自定義函數(user defined function),針對單條記錄。編寫一個UDF,需要繼承UDF類,並實現evaluate()函數。在查詢執行過程中,查詢中對應的每個應用到這個函數的地方都會對這個類進行實例化。對於每行輸入都會調用到evaluate()函數。而evaluate()函數處理的值會返回給Hive。同時用戶是可以重載evaluate方法的。Hive會像Java的方法重載一樣,自動選擇匹配的方法.

 

一、應用案例

1)全角轉半角

  View Code

 

2)身份證信息驗證

  View Code

 

  View Code

 

 

 

二、添加jar的三種方式

1)使用add jar jarpath/hive-udf.jar;方法加入

該方法的缺點是每次啓動Hive的時候都要從新加入,退出hive就會失效。

2)通過設置hive的配置文件hive-site.xml 加入

在配置文件中增加配置
<property>
<name>hive.aux.jars.path</name>
<value>file:///jarpath/hive-udf1.jar,file:///jarpath/hive-udf2.jar</value>
</property>
保存即可

該方法比第一種方法方便很多。不需要每次啓動Hive執行命令加入,只是配置稍微複雜一些

3)在${HIVE_HOME}下創建auxlib目錄,將UDF文件放到該目錄中,這樣hive在啓動時會將其中的jar文件加載到classpath中 

這種方法,方便快捷,不需要重啓HVIE服務

三、 函數聲明:

//創建臨時函數

create temporary function toSingleByte as 'com.sjck.hive.udf.ToSingleByte';

//創建永久函數

create function toSingleByte as 'com.sjck.hive.udf.ToSingleByte';

create function  verifiyCardNo as  'com.sjck.hive.udf.VerifiyCardNo';

刪除永久函數

drop  function toSingleByte;

drop function verifiyCardNo;

 

個人是hive的udf 放在 hdfs上

hadoop fs  -mkdir/user/hive/udf

hadoop fs -put hive-udf.jar /user/hive/udf/

 

create function toSingleByte AS 'com.sjck.hive.udf.ToSingleByte' using jar 'hdfs://master01:8020/user/hive/udf/hive-udf.jar';

create function verifiyCardNo AS 'com.sjck.hive.udf.VerifiyCardNo'using jar 'hdfs://master01:8020/user/hive/udf/hive-udf.jar';

 

 

 

https://www.cnblogs.com/kopao/p/13650868.html

https://www.cnblogs.com/xuziyu/p/10754592.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章