hive函數中的operators, UDF, UDAF, UDTF, PTF

operators

=, !=, <, >, IS NULL, ...
+, -, *, /, ...
AND, OR, IN, ...java

UDF(User Defined Functions)

hive內置的udf函數(1 -> 1):**
math: round, floor, ceil, exp, log, ...
date: to_date, from_unixtimestamp, ...
conditional: if, isnull, case, coalsce, ...
string: char, concat, lower, trim, repeat, ...apache

自定義的UDF實現方法:數組

  1. 繼承UDF類
  2. 重寫evaluate方法
  3. 將該java文件編譯成jar

UDAF(User Defined Aggregate Functions)

hive內置的udaf函數(n -> 1):
count, sum, min, max, corr, ....函數

自定義的UDAF實現方法:
1,用戶的UDAF必須繼承了org.apache.hadoop.hive.ql.exec.UDAF;
2,用戶的UDAF必須包含至少一個實現了org.apache.hadoop.hive.ql.exec的靜態類,諸如實現了 UDAFEvaluator
3,一個計算函數必須實現的5個方法的具體含義以下:
init():主要是負責初始化計算函數而且重設其內部狀態,通常就是重設其內部字段。通常在靜態類中定義一個內部字段來存放最終的結果。oop

iterate():每一次對一個新值進行彙集計算時候都會調用該方法,計算函數會根據彙集計算結果更新內部狀態。當輸 入值合法或者正確計算了,則 就返回true。lua

terminatePartial():Hive須要部分彙集結果的時候會調用該方法,必需要返回一個封裝了彙集計算當前狀態的對象。url

merge():Hive進行合併一個部分彙集和另外一個部分彙集的時候會調用該方法。spa

terminate():Hive最終彙集結果的時候就會調用該方法。計算函數須要把狀態做爲一個值返回給用戶。unix

UDTF(User Defined Tabular Functions)

hive內置的udtf函數(1 -> n):
explode, posexplode, parse_url_tuple, ...對象

自定義的實現方法:

  1. 繼承org.apache.hadoop.hive.ql.udf.generic.GenericUDTF

2.initialize():UDTF首先會調用initialize方法,此方法返回UDTF的返回行的信息(返回個數,類型)

3.process:初始化完成後,會調用process方法,真正的處理過程在process函數中,在process中,每一次forward() 調用產生一行;若是產生多列 能夠將多個列的值放在一個數組中,而後將該數組傳入到forward()函數
4.最後close()方法調用,對須要清理的方法進行清理

PTF(Partitioned table Function, Window Functions)

hive內置的ptf函數(n -> m):
ROW_NUMBER(), RANK(), DENSE_RANK()

ROW_NUMBER() : 給分區每一行分別編號

clipboard.png

RANK() :分區排名

clipboard.png

DENSE_RANK() : 分區排名(緊密連續的名次)

clipboard.png

e.g.

clipboard.png

Usage

hive> show functions;
hive> desc function funcName;
hive> desc function extended funcName; // describe function with some example

customize:

  1. develop UD[.*]F
  2. compile to *.jar
  3. deploy to cluster

hive> add jar /path/to/lib.jar;hive> create temporary function xxxx as "java.class.name";hive> select xxxx(...) ...;hive> drop temporary function xxxx;

相關文章
相關標籤/搜索