Hive中的資料型別以及案例實操

孫晨c發表於2020-10-01

@

基本資料型別

在這裡插入圖片描述
在這裡插入圖片描述
對於Hive的String型別相當於資料庫的varchar型別,該型別是一個可變的字串,不過它不能宣告其中最多能儲存多少個字元,理論上它可以儲存2GB的字元數。

集合資料型別

在這裡插入圖片描述
Hive有三種複雜資料型別ARRAY、MAP 和 STRUCT。ARRAY和MAP與Java中的Array和Map類似,而STRUCT與C語言中的Struct類似,它封裝了一個命名欄位集合,複雜資料型別允許任意層次的巢狀。
Map和Struct的區別Struct中屬性名是不變的!Map中key可以變化的!

案例實操

  1. 假設某表有如下一行,我們用JSON格式來表示其資料結構。在Hive下訪問的格式為
{
    "name": "songsong",
    "friends": ["bingbing" , "lili"] ,       //列表Array, 
    "children": {                      //鍵值Map,
        "xiao song": 18 ,
        "xiaoxiao song": 19
    }
    "address": {                      //結構Struct,
        "street": "hui long guan" ,
        "city": "beijing" 
    }
}
  1. 基於上述資料結構,我們在Hive裡建立對應的表,並匯入資料。
    建立本地測試檔案test.txt
songsong,bingbing_lili,xiao song:18_xiaoxiao song:19,hui long guan_beijing
yangyang,caicai_susu,xiao yang:18_xiaoxiao yang:19,chao yang_beijing

注意: 在一個表中,array每個元素之間的分隔符和Map每個Entry之間的分隔符和struct每個屬性之間的分隔符需要一致!

  1. Hive上建立測試表test
create table test(
name string,
friends array<string>,
children map<string, int>,
address struct<street:string, city:string>
)
row format delimited fields terminated by ','
collection items terminated by '_'
map keys terminated by ':'
lines terminated by '\n';

欄位解釋:
row format delimited fields terminated by ',' -- 列分隔符
collection items terminated by '_' --MAP STRUCT 和 ARRAY 的分隔符(資料分割符號)
map keys terminated by ':' -- MAP中的key與value的分隔符
lines terminated by '\n'; -- 行分隔符

  1. 匯入文字資料到測試表
hive (default)> load data local inpath ‘/opt/module/datas/test.txt’into table test
  1. 訪問三種集合列裡的資料,以下分別是ARRAY,MAP,STRUCT的訪問方式
hive (default)> select friends[1],children['xiao song'],address.city from test
where name="songsong";
OK
_c0     _c1     city
lili    18      beijing
Time taken: 0.076 seconds, Fetched: 1 row(s)

相關文章