Hive函式——UDF
阿新 • • 發佈:2018-12-12
內建函式
檢視系統自帶的函式
show functions;
顯示自帶的函式的用法
desc function upper;
詳細顯示自帶的函式的用法
desc function extended upper;
自定義函式
Hive 自帶了一些函式,比如:max/min等,但是數量有限,可以通過自定義UDF來方便的擴充套件。 當Hive提供的內建函式無法滿足你的業務處理需要時,此時就可以考慮使用使用者自定義函式(UDF:user-defined function)。
根據使用者自定義函式類別分為以下三種:
(1)UDF(User-Defined-Function) 一輸入一輸出 (2)UDAF(User-Defined Aggregation Function) 聚集函式,多輸入一輸出 類似於:count/max/min (3)UDTF(User-Defined Table-Generating Functions) 一輸入多輸出 如lateral view explore()
官方文件地址
程式設計步驟:
(1)繼承org.apache.hadoop.hive.ql.UDF
(2)需要實現evaluate函式;evaluate函式支援過載;
注意事項
(1)UDF必須要有返回型別,可以返回null,但是返回型別不能為void;
(2)UDF中常用Text/LongWritable等型別,不推薦使用java型別;
通過java進行UDF開發例項
1、導包,引入依賴
<repositories> <repository> <id>cloudera</id> <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url> </repository> </repositories> <dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.6.0-cdh5.14.0</version> </dependency> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <version>1.1.0-cdh5.14.0</version> </dependency> </dependencies>
2、開發java類繼承UDF,並重載evaluate 方法
public class MyUDF extends UDF {
public Text evaluate(final Text s) {
if (null == s) {
return null;
}
//返回大寫字母
return new Text(s.toString().toUpperCase());
}
}
3、打包,上傳到hive的lib目錄下
上傳jar包並將jar包進行重新命名,這裡命名為MyUDF.
4、在hive客戶端新增jar包
add jar /export/servers/hive-1.1.0-cdh5.14.0/lib/MyUDF.jar;
5、設定函式與我們的自定義函式關聯
create temporary function touppercase as 'com.fgm.udf.MyUDF';
6、使用自定義函式
select touppercase (‘abc’);