系統(tǒng)內(nèi)置函數(shù)
- 查看系統(tǒng)自帶的函數(shù)
show functions; - 顯示自帶函數(shù)的用法
desc function year; - 詳細(xì)顯示自帶函數(shù)的用法
desc function extended year;
自定義函數(shù)
Hive 自帶了一些函數(shù),比如:max/min等瘩例,但是數(shù)量有限惋戏,自己可以通過(guò)自定義UDF來(lái)方便的擴(kuò)展
當(dāng)Hive提供的內(nèi)置函數(shù)無(wú)法滿足你的業(yè)務(wù)處理需要時(shí)炮捧,此時(shí)就可以考慮使用用戶自定義函數(shù)(UDF:user-defined function)
根據(jù)用戶自定義函數(shù)類別分為以下三種
- UDF(User-Defined-Function)
一進(jìn)一出 - UDAF(User-Defined Aggregation Function)
聚集函數(shù)驰徊,多進(jìn)一出
類似于:count/max/min - UDTF(User-Defined Table-Generating Functions)
一進(jìn)多出
如lateral view explore()
自定義函數(shù)步驟
- 繼承org.apache.hadoop.hive.ql.UDF
- 需要實(shí)現(xiàn)evaluate函數(shù)笤闯;evaluate函數(shù)支持重載;
- 在hive的命令行窗口創(chuàng)建函數(shù)
1). 添加jar
add jar linux_jar_path
2). 創(chuàng)建function辣垒,
create [temporary] function [dbname.]function_name AS class_name; - 在hive的命令行窗口刪除函數(shù)
Drop [temporary] function [if exists] [dbname.]function_name;
注意望侈,UDF必須要有返回類型印蔬,可以返回null勋桶,但是返回類型不能為void
自定義UDF函數(shù)
- 創(chuàng)建一個(gè)Maven工程Hive
- 導(dǎo)入依賴
<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>
- 創(chuàng)建一個(gè)類
package com.zj.hive;
import org.apache.hadoop.hive.ql.exec.UDF;
public class MyFunction extends UDF {
public String evaluate(final String a) {
if(a == null) {
return null;
}
return a.toLowerCase();
}
}
- 打包上傳
- 添加jar包
add jar /opt/module/datas/udf.jar; - 創(chuàng)建臨時(shí)函數(shù)
create temporary function myFunctionLower as 'com.zj.hive.MyFunction'; - 使用
select ename, myFunctionLower(ename) from emp;