1. 程式人生 > >Hive(9)-自定義函式

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;