Hive(9)-自定義函式
一. 自定義函式分類
當Hive提供的內建函式無法滿足你的業務處理需要時,此時就可以考慮使用使用者自定義函式.
根據使用者自定義函式類別分為以下三種:
1. UDF(User-Defined-Function) 一進一出
2. UDAF(User-Defined Aggregation Function) 聚集函式,多進一出, 類似於:count/max/min
3. UDTF(User-Defined Table-Generating Functions) 一進多出 如lateral view explore()
二.自定義步驟
官方文件地址: https://cwiki.apache.org/confluence/display/Hive/HivePlugins
1. 繼承org.apache.hadoop.hive.ql.UDF
2. 需要實現evaluate函式
evaluate函式支援過載;
3. 在hive的命令列視窗建立函式
1). 新增jar: add jar linux_jar_path
2). 建立function: create [temporary] function [dbname.]function_name AS class_name;
刪除: Drop [temporary] function [if exists] [dbname.]function_name;
tips: UDF必須要有返回型別,可以返回null,但是返回型別不能為void;
三. 自定義函式例項
1. 建立Maven工程
2.匯入依賴
<dependencies> <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec --> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <version>1.2.1</version> </dependency> </dependencies>
3. 建立自定義類
package com.nty.udf; import org.apache.hadoop.hive.ql.exec.UDF; /** * author nty * date time 2018-12-21 19:45 */ public class Lower extends UDF { //返回str的小寫 public String evaluate(String str) { if( null == str){ return null; } return str.toLowerCase(); } }
4. 使用maven打成jar包,並上傳至/opt/module/jars目錄下
5. 將jar包新增到hive的classpath
add jar /opt/module/datas/udf.jar;
6. 建立[臨時]函式與開發好的java class關聯
create temporary function ntylower as "com.nty.udf.Lower";
7. 使用
select ename, ntylower(ename) lowername from emp;