1. 程式人生 > >HIVE---UDF

HIVE---UDF

UDF介紹

  UDF,即使用者自定義函式,本質就是外掛。整體思路是:繼承基類UDF,實現evaluate介面,指定類名即可。HIVE中UDF分為兩類:臨時函式和永久函式,函式型別的不同,具體操作過程略有差異。

臨時函式

  函式的生命週期與客戶端的會話強繫結,會話關閉時函式被登出;

持久函式

  函式的元資訊被持久化到元資料,與客戶端會話的生命相互獨立;

UDF新增過程

Step1:編寫Java實現類,並進行打包;


package com.example.hive.udf;
 
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
 
public final class Lower extends UDF {
  public Text evaluate(final Text s) {
    if (s == null) { return null; }
    return new Text(s.toString().toLowerCase());
  }
}

Step2:註冊UDF,與實現類建立對映關係;

  • 臨時函式:首先,jar包新增到classpath; 然後執行CREATE命令註冊函式,如下:
CREATE TEMPORARY FUNCTION function_name AS class_name;
  • 持久函式:直接執行CREATE命令註冊函式,如下:
CREATE FUNCTION [db_name.]function_name AS class_name
  [USING JAR|FILE|ARCHIVE 'file_uri' [, JAR|FILE|ARCHIVE 'file_uri'] ];

說明:file_uri為jar包的存放路徑,叢集模式下使用HDFS路徑;單機模式下,可以使用本地路徑;

UDF刪除過程

  • 臨時函式:關閉當前會話,或者使用DROP命令;
DROP TEMPORARY FUNCTION [IF EXISTS] function_name;
  • 持久函式: 只能使用DROP命令;
DROP FUNCTION [IF EXISTS] function_name;

函式檢視

  • 檢視所有所有函式:show functions;
  • 檢視某類函式:show functions like ‘*month*’;
  • 檢視某個函式的用法:desc function 函式名;
  • 檢視某個函式的詳細用法:desc extended function 函式名;

參考:

  1. https://cwiki.apache.org/confluence/display/Hive/HivePlugins;
  2. https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-Create/Drop/ReloadFunction;