1、udf 函式可以直接應用於 select 語句,對查詢結構做格式化處理後,再輸出內容。
2、編寫 udf 函式的時候需要注意一下幾點:
a)自定義 udf 需要繼承 org.apache.hadoop.hive.ql.udf。
b)需要實現 evaluate 函式,evaluate 函式支援過載。
3、步驟
a)把程式打包放到目標機器上去;
b)進入 hive 客戶端,新增 jar 包
方式1:
hive> add jar trim.jar
方式2:
在啟動時在命令後傳遞 --auxpath選項, --auxpath後面為jar包所在的路徑
例如,我的jar包所在目錄的路徑為:/usr/hive/myjar/,則可以用以下幾種方式啟動hive
hive --auxpath /usr/hive/myjar/trim.jar 或
hive --auxpath /usr/hive/myjar/*.jar (這種方式jar包名稱和類名稱要一致,否則出錯) 或
hive --auxpath /usr/hive/myjar/
c)建立臨時函式:hive>create temporary function add_example as 'hive.udf.add';
d)查詢 hql 語句:
select add_example(8, 9) from scores;
select add_example(scores.math, scores.art) from scores;
select add_example(6, 7, 8, 6.8) from scores;
e)銷毀臨時函式:hive> drop temporary function add_example;
多行進一行出,如
sum()
、min()
,用在group
by 時
1.必須繼承org.apache.hadoop.hive.ql.exec.udaf(函式類繼承)
org.apache.hadoop.hive.ql.exec.udafevaluator(內部類 eval uator 實現 udafevaluator 介面)
evaluator 需要實現 init、iterate、terminatepartial、merge、t erminate 這幾個函式
init():類似於建構函式,用於 udaf 的初始化
iterate():接收傳入的引數,並進行內部的輪轉,返回 boolean
terminatepartial():無引數,其為 iterate 函式輪轉結束後,返回輪轉資料,類似於 hadoop 的 combinermerge():接收 terminatepartial 的返回結果,進行資料 merge 操作,其返回型別為 boolean
terminate():返回最終的聚集函式結果
Hive自定義UDF和聚合函式UDAF
hive是一種構建在hadoop上的資料倉儲,hive把sql查詢轉換為一系列在hadoop集群中執行的mapreduce作業,是mapreduce更高層次的抽象,不用編寫具體的mapreduce方法。hive將資料組織為表,這就使得hdfs上的資料有了結構,元資料即表的模式,都儲存在名為metas...
Hive自定義UDF和聚合函式UDAF
一 hive可以允許使用者編寫自己定義的函式udf,來在查詢中使用。hive中有3種udf udf 操作單個資料行,產生單個資料行 udaf 操作多個資料行,產生乙個資料行。udtf 操作乙個資料行,產生多個資料行乙個表作為輸出。二 編寫自己定義的函式udf 第一步 繼承udf或者udaf或者udt...
Hive自定義UDF和聚合函式UDAF
hive是一種構建在hadoop上的資料倉儲,hive把sql查詢轉換為一系列在hadoop集群中執行的mapreduce作業,是mapreduce更高層次的抽象,不用編寫具體的mapreduce方法。hive將資料組織為表,這就使得hdfs上的資料有了結構,元資料即表的模式,都儲存在名為metas...