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,資料新增成功。