hive--[ array、map、struct]使用


復合數據類型

Structs: structs內部的數據可以通過DOT(.)來存取,例如,表中一列c的類型為STRUCT{a INT; b INT},我們可以通過c.a來訪問域a
Maps(K-V對):訪問指定域可以通過["指定域名稱"]進行,例如,一個Map M包含了一個group-》gid的kv對,gid的值可以通過M['group']來獲取
Arrays:array中的數據為相同類型,例如,假如array A中元素['a','b','c'],則A[1]的值為'b'

 類型  解釋  舉例
 struct  與c++中的結構體類似,可通過‘.’訪問每個域的值,比如Struct{first string,last string},可以通過name.first訪問第一個成員  struct('john',‘doe’)
 map  存儲key/value對,可通過['key']獲取每個key的值,比如‘first’-->'john' 可通過name['last']獲取last name。
 map('first','john',last,'doe')
 array  同種類型的數據集合,從0開始索引,比如['john','doe'],可通過name[1]獲取doe
 array('john','doe')

 

使用實例

1.創建數據表

create table test1.employess1(
name string,
salary FLOAT,
subordinates ARRAY<string>,
deductions MAP<string,FLOAT>,
address STRUCT<stree:string,city:string,state:string,zip:int>)
partitioned by(country string,state string)
row format delimited
  fields terminated by '\t'
COLLECTION ITEMS TERMINATED BY ','                       
MAP KEYS TERMINATED BY ':'     
stored as textfile;
  • 'FIELDS TERMINATED BY' :字段與字段之間的分隔符
  • ''COLLECTION ITEMS TERMINATED BY' :一個字段各個item的分隔符
  • ‘MAP KEYS TERMINATED BY’ :key value分隔符

2.測試數據

John Doe    10000.0    Mary Sith,Todd Jones    Federal Taxes:0.2,State Taxes:0.1,Insurance:0.1    1 Michigan Ave.,Chicago,IL,60600
Mary Smith    80000.0    Bill King    Federal Taxes:0.2,State Taxes:0.05,Insurance:0.1    100 Ontario St.,Chicago,IL,60601
Todd Jones    70000.0        Federal Taxes:0.15,State Taxes:0.03,Insurance:0.1    200 Chicago Ave.,Oak Park,NY,60700
Bill King    60000.0        Federal Taxes:0.15,State Taxes:0.03,Insurance:0.1    300 Obscure Dr.,Obscur,CA,60100

注意一下字段直接的區分標識和map中key和value的區分標識。

3.查詢數據

ARRAY查詢:

select subordinates[0] from test1.employess1;

結果:

Mary Sith
Bill King
NULL
NULL

MAP查詢:

select deductions['Federal Taxes'] from test1.employess1;

結果:

0.2
0.2
0.15
0.15

查看map中的鍵值對個數:

select size(deductions) from test1.employess1;

結果:

3
3
3
3

STRUCT查詢:

select address.state,address.stree from test1.employess1;

結果:

IL    1 Michigan Ave.
IL    100 Ontario St.
NY    200 Chicago Ave.
CA    300 Obscure Dr.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM