Hive學習之路 (十)Hive的高級操作
一、負責數據類型
1、array
現有數據如下:
1 huangbo guangzhou,xianggang,shenzhen a1:30,a2:20,a3:100 beijing,112233,13522334455,500
2 xuzheng xianggang b2:50,b3:40 tianjin,223344,13644556677,600
3 wangbaoqiang beijing,zhejinag c1:200 chongqinjg,334455,15622334455,20
建表語句
use class;create table cdt( id int, name string, work_location array<string>, piaofang map<string,bigint>, address struct<location:string,zipcode:int,phone:string,value:int>) row format delimited fields terminated by "\t" collection items terminated by "," map keys terminatedby ":" lines terminated by "\n";
導入數據
0: jdbc:hive2://hadoop3:10000> load data local inpath "/home/hadoop/cdt.txt" into table cdt;
查詢語句
select * from cdt;
select name from cdt;
select work_location from cdt;
select work_location[0] from cdt;
select work_location[1] from cdt;
2、map
建表語句、導入數據同1
查詢語句
select piaofang from cdt;
select piaofang["a1"] from cdt;
3、struct
建表語句、導入數據同1
查詢語句
select address from cdt;
select address.location from cdt;
4、uniontype
很少使用
參考資料:http://yugouai.iteye.com/blog/1849192
二、視圖
1、Hive 的視圖和關系型數據庫的視圖區別
和關系型數據庫一樣,Hive 也提供了視圖的功能,不過請註意,Hive 的視圖和關系型數據庫的數據還是有很大的區別:
(1)只有邏輯視圖,沒有物化視圖;
(2)視圖只能查詢,不能 Load/Insert/Update/Delete 數據;
(3)視圖在創建時候,只是保存了一份元數據,當查詢視圖的時候,才開始執行視圖對應的 那些子查詢
2、Hive視圖的創建語句
create view view_cdt as select * from cdt;
3、Hive視圖的查看語句
show views; desc view_cdt;-- 查看某個具體視圖的信息
4、Hive視圖的使用語句
select * from view_cdt;
5、Hive視圖的刪除語句
drop view view_cdt;
三、函數
1、內置函數
具體可看http://www.cnblogs.com/qingyunzong/p/8744593.html
(1)查看內置函數
show functions;
(2)顯示函數的詳細信息
desc function substr;
(3)顯示函數的擴展信息
desc function extended substr;
2、自定義函數UDF
當 Hive 提供的內置函數無法滿足業務處理需要時,此時就可以考慮使用用戶自定義函數。
UDF(user-defined function)作用於單個數據行,產生一個數據行作為輸出。(數學函數,字 符串函數)
UDAF(用戶定義聚集函數 User- Defined Aggregation Funcation):接收多個輸入數據行,並產 生一個輸出數據行。(count,max)
UDTF(表格生成函數 User-Defined Table Functions):接收一行輸入,輸出多行(explode)
(1) 簡單UDF示例
(2) JSON數據解析UDF開發
(3) Transform實現
四、特殊分隔符處理
1、使用RegexSerDe正則表達式解析
2、通過自定義InputFormat處理特殊分隔符
Hive學習之路 (十)Hive的高級操作