hive可以任意定義乙個函式,然後該函式放到hive的classpath下,在進入hive中,使用該命令操作
場景:設中國移動的使用者在**上下單,下單記錄的主要字段包括
訂單號 手機號碼 商品編碼 商品數量 渠道
10000 18810637891 bm0001 1 0001
10001 18710637891 bm0002 2 0002
10002 18710637891 bm0001 1 0001
10003 18610637891 bm0002 2 0003
10004 18610637891 bm0002 5 0001
10005 18610637891 bm0004 2 0005
已知:如何根據手機號得知該使用者對應的省份。假設規則如下(即:手機號前三位和省份的對應的關係)
188 北京(bj)
187 上海(sh)
186 河北(hb)
對上面的記錄在手機號的後面加上省份字段,然後把其餘字段輸出並上傳hdfs上
解決方案:
1、下單記錄日誌存放在日誌檔案jforder.log中
[hadoop@cloud01 sbin]$ hadoop fs -mkdir /external
[hadoop@cloud01 sbin]$ hadoop fs -mkdir /external/hive
hive> create external table jf_order (orderno string ,mobileno string,warecode string,amount int ,channel string)
> row format delimited
> fields terminated by '\t'
> location '/external/hive';
[hadoop@cloud01 ~]$ more jforder.log
10000 18810637891 bm0001 1 0001
10001 18710637891 bm0002 2 0002
10002 18710637891 bm0001 1 0001
10003 18610637891 bm0002 2 0003
10004 18610637891 bm0002 5 0001
10005 18610637891 bm0004 2 0005
[hadoop@cloud01 ~]$ hadoop fs -put jforder.log /external/hive
2、編寫hive的函式areafunction,作用根據手機號獲取對應的使用者省份
3、啟動eclipse,編寫udf函式
/***
@function: 定義省份轉換函式,載入hive的 classpath下,可以直接使用
*@authorshenfl
*@version:1.0
*@date: 2015-5
-31*
*/publicclassareafunctionextendsudf
publicstring evaluate(string
mobilenumber )
publicstaticvoidmain(string args )
}4、上傳編寫的函式,把編寫好的函式放到hive的classpath下
hive>add jar /home/hadoop/hiveudf.jar;
hive>create temporary function area2 as 'com.hive.areafunction';
5、驗證
hive> select orderno ,area2(mobileno),warecode,amount ,channel from jf_order;
6、強化後的結果儲存到hdfs上
hive> insert overwrite directory '/hiveout' select orderno ,area2(mobileno),warecode,amount ,channel from jf_order;
hive自定義函式UDF
hive自定義函式 udf 可以幫助使用者輕鬆實現在hql語句中展現自定義查詢結果。這裡以乙個簡單的連線函式來實現使用者自定義函式,假設表結構如下 表中只有兩個簡單的字段,id和name。這裡實現乙個將id和name用 連線的函式,最後輸出結果。第一步 書寫stringjoin類,繼承udf,實現名...
hive自定義函式 UDF
幾個命令 檢視所有函式 hive show functions 檢視函式的使用方法 hive desc function 函式名 兩數和 addudf 自定義hive函式 description name myadd value myadd int a int b return a b extend...
hive自定義udf函式
在建立自定義函式時,需要將jar包全部部署到hive server節點的所有機器的使用者定義的udf引數目錄 hive.reloadable.aux.jars.path.jars.path.property property value usr lib hive lib value 呼叫 impor...