Hive 支持關係型數據中大多數基本數據類型,除了額外的三個複雜的數據類型。
一、數據類型
array
類比java中的array 有序的的同類型的集合
create table test(
id int,
name string,
hobby array<string>
)
row format delimited
fields terminated by '\t'
collection items terminated by ',';
array的默認分割是\002,在shell中如何敲出來ctrl+v ctrl+b,這裏使用的是逗號分隔
在導入數據時,數據的格式應該如下:
1 張三 read,run
array的引用,使用arrayName[index],索引從0開始
map
類比java中的map key-value,key必須爲原始類型,value可以任意類型
create table test(
id int,
name string,
score map<string, float> comment "this is score"
) row format delimited
fields terminated by '\t'
collection items terminated by ','
map keys terminated by '=';
根據上面的定義,導入的數據格式應該如下:
1 張三 Chinese=102,Math=121,English=124
map裏面的默認的key和value之間的分隔符:\003,在shell裏面通過ctrl+v ctrl+c
map具體值的調用格式,列名[“屬性”],比如score[“math”]
struct
類比java中的object 字段集合,類型可以不同
create table t5_struct (
id int,
name string,
address struct<province:string, city:string, zip:int>
) row format delimited
fields terminated by '\t'
collection items terminated by ',';
根據上面的定義,導入的數據格式應該如下:
id name address(province:string, city:string, zip:int)
1 小陳 bj,chaoyang,100002
2 老王 hb,shijiazhuang,052260
3 小何 hn,huaiyang,466000
4 小馬 hlj,harbin,10000
調用的格式:列名.屬性,比如address.province
二、存儲格式
textfile
textfile爲默認格式,存儲方式爲行存儲。數據不做壓縮,磁盤開銷大,數據解析開銷大
SequenceFile
SequenceFile是Hadoop API提供的一種二進制文件支持,其具有使用方便、可分割、可壓縮的特點
SequenceFile支持三種壓縮選擇:NONE, RECORD, BLOCK。 Record壓縮率低,一般建議使用BLOCK壓縮。
RCFile
一種行列存儲相結合的存儲方式
ORCFile
數據按照行分塊,每個塊按照列存儲,其中每個塊都存儲有一個索引。hive給出的新格式,屬於RCFILE的升級版,性能有大幅度提升,而且數據可以壓縮存儲,壓縮快 快速列存取。
Parquet
Parquet也是一種行式存儲,同時具有很好的壓縮性能;同時可以減少大量的表掃描和反序列化的時間