1. 程式人生 > >Hive學習之路 (十)Hive的高級操作

Hive學習之路 (十)Hive的高級操作

ipc functions nes aof inpu 輸入 表格 開發 eat

一、負責數據類型

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 terminated
by ":" 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的高級操作