Hive自定義函數(shù)注冊(cè)
查詢引擎都自帶了一部分函數(shù)來幫助我們解決查詢過程當(dāng)中一些復(fù)雜的數(shù)據(jù)計(jì)算或者數(shù)據(jù)轉(zhuǎn)換操作猾浦,但是有時(shí)候自帶的函數(shù)功能不能滿足業(yè)務(wù)的需要虫啥。這時(shí)候就需要我們自己開發(fā)自定義的函數(shù)來輔助完成了。
UDF函數(shù)其實(shí)就是一段遵循一定接口規(guī)范的程序。在執(zhí)行過程中Hive將SQL轉(zhuǎn)換為MapReduce程序,在執(zhí)行過程當(dāng)中在執(zhí)行我們的UDF函數(shù)遇西。
Hive UDF類型
Hive中有3種UDF:
UDF:操作單個(gè)數(shù)據(jù)行,產(chǎn)生單個(gè)數(shù)據(jù)行
UDAF:操作多個(gè)數(shù)據(jù)行严嗜,產(chǎn)生一個(gè)數(shù)據(jù)行
UDTF:操作一個(gè)數(shù)據(jù)行,產(chǎn)生多個(gè)數(shù)據(jù)行一個(gè)表作為輸出
UDF注冊(cè)
關(guān)于UDF的開發(fā)我們?cè)谝曨l當(dāng)中已經(jīng)對(duì)其進(jìn)行了講解和演示洲敢,本文就不在贅述了漫玄,相關(guān)的代碼可以在慕課的git上找到。大家可以看一下示例压彭,然后自己動(dòng)手練習(xí)一下睦优。
開發(fā)了UDF之后,我們需要將UDF注冊(cè)到Hive中才能使用壮不,那么如何進(jìn)行函數(shù)的注冊(cè)呢汗盘?Hive中對(duì)于UDF的注冊(cè)分為兩種,一種是臨時(shí)注冊(cè)询一,一種是永久注冊(cè)隐孽。
顧名思義,臨時(shí)注冊(cè)即當(dāng)前session中生效健蕊,而永久注冊(cè)是一直生效菱阵。
臨時(shí)注冊(cè)
#導(dǎo)入jar包
#部署到hive的lib下,進(jìn)入hive的交互式環(huán)境
hive
#添加jar到hive的classpath缩功,或者add jar時(shí)指定全路徑
add jar hive-udf-test-1.0-SNAPSHOT.jar
#注冊(cè)臨時(shí)函數(shù)
create temporary function UDF_NAME AS 'com.imooc.naga.TESTUDF';
#刪除注冊(cè)函數(shù)
drop temporary function UDF_NAME;
永久注冊(cè)
#永久注冊(cè)需要將jar包放到HDFS上晴及,避免無法找到
create function UDF_NAME as 'com.imooc.naga.TESTUDF' using jar 'hdfs://hive_udf/hive-udf-test-1.0-SNAPSHOT.jar';
#刪除注冊(cè)函數(shù)
drop function UDF_NAME;