1. 程式人生 > >Hive函式——UDF

Hive函式——UDF

內建函式

檢視系統自帶的函式

 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’);