Hive學習之五 《Hive進階—UDF操作案例》 詳解

木子小僧發表於2016-03-28

hive—UDF操作

udf的操作過程:

HIVE會話中add 自定義函式的jar檔案,然後建立function,繼而使用函式。

 

下面就以下面課題為例:

課題:統計每個活動的PV和UV

一、Java通過正規表示式,擷取標題名稱。

以連結,擷取標紅的字串。

http://cms.yhd.com/sale/vtxqCLCzfto?tc=ad.0.0.17280-32881642.1&tp=1.1.36.9.1.LEffwdz-10-35RcM&ti=ZX8H

為例。

核心程式碼如下,

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.hadoop.hive.ql.exec.UDF;

public class GetCommentNameOrId extends UDF {
    public String evaluate(String url,String flag){
        String str = null;
        Pattern p = Pattern.compile(flag+"/[a-zA-Z0-9]+");
        Matcher m = p.matcher(url);
        if(m.find()){
            str = m.group(0).toLowerCase().split("/")[1];
        }
        return str;
    }
    
    public static void main(String[] args) {
        String url = "http://cms.yhd.com/sale/vtxqCLCzfto?tc=ad.0.0.17280-32881642.1&tp=1.1.36.9.1.LEffwdz-10-35RcM&ti=ZX8H";
        GetCommentNameOrId gs = new GetCommentNameOrId();
        System.out.println(gs.evaluate(url,"sale"));
    }
}

 

 傳參:

url:http://cms.yhd.com/sale/vtxqCLCzfto?tc=ad.0.0.17280-32881642.1&tp=1.1.36.9.1.LEffwdz-10-35RcM&ti=ZX8H

flag:sale

最後得到的結果是 :vtxqCLCzfto

 二、UDF操作

  1、在rptest庫中建立表

create table rptest.rpt_sale_daily(
huodong string,
pv bigint,
uv bigint) partitioned by (ds string,hour string);

  2、打jar包,並上傳到制定的路徑

  add jar /opt/litong/lib/hiveUDF.jar

  3、指定屬性類,建立function

  create temporary function GetCommentNameOrId as 'com.litong.hive.udf.GetCommentNameOrId';

  4、新增資料到表rpt_sale_daily中 

insert overwrite table rptest.rpt_sale_daily partition (ds='2015-08-28',hour='18')
select GetCommentNameOrId(url,"sale") huodong,count(url) pv,count(distinct guid) uv from default.track_log a 
where ds='2015-08-28' and hour='18'
group by ds,GetCommentNameOrId(url,"sale");

insert overwrite table rptest.rpt_sale_daily partition (ds='2015-08-28',hour='19')
select GetCommentNameOrId(url,"sale") huodong,count(url) pv,count(distinct guid) uv from default.track_log a 
where ds='2015-08-28' and hour='19'
group by ds,GetCommentNameOrId(u

  5、檢查資料是否插入成功

  

      

OK,資料新增成功。

  

  

相關文章