hive支援的儲存數的格式主要有:textfile 、sequencefile、orc、parquet。
列式儲存和行式儲存
如圖6-10所示左邊為邏輯表,右邊第乙個為行式儲存,第二個為列式儲存。
1.行儲存的特點
查詢滿足條件的一整行資料的時候,列儲存則需要去每個聚集的字段找到對應的每個列的值,行儲存只需要找到其中乙個值,其餘的值都在相鄰地方,所以此時行儲存查詢的速度更快。
2.列儲存的特點
因為每個欄位的資料聚集儲存,在查詢只需要少數幾個欄位的時候,能大大減少讀取的資料量;每個欄位的資料型別一定是相同的,列式儲存可以針對性的設計更好的設計壓縮演算法。
textfile和sequencefile的儲存格式都是基於行儲存的;
orc和parquet是基於列式儲存的。
textfile格式
預設格式,資料不做壓縮,磁碟開銷大,資料解析開銷大。可結合gzip、bzip2使用,但使用gzip這種方式,hive不會對資料進行切分,從而無法對資料進行並行操作。
orc格式
orc (optimized row columnar)是hive 0.11版裡引入的新的儲存格式。
如圖6-11所示可以看到每個orc檔案由1個或多個stripe組成,每個stripe250mb大小,這個stripe實際相當於rowgroup概念,不過大小由4mb->250mb,這樣應該能提公升順序讀的吞吐率。每個stripe裡有三部分組成,分別是index data,row data,stripe footer:
1)index data:乙個輕量級的index,預設是每隔1w行做乙個索引。這裡做的索引應該只是記錄某行的各字段在row data中的offset。
2)row data:存的是具體的資料,先取部分行,然後對這些行按列進行儲存。對每個列進行了編碼,分成多個stream來儲存。
3)stripe footer:存的是各個stream的型別,長度等資訊。
每個檔案有乙個file footer,這裡面存的是每個stripe的行數,每個column的資料型別資訊等;每個檔案的尾部是乙個postscript,這裡面記錄了整個檔案的壓縮型別以及filefooter的長度資訊等。在讀取檔案時,會seek到檔案尾部讀postscript,從裡面解析到file footer長度,再讀filefooter,從裡面解析到各個stripe資訊,再讀各個stripe,即從後往前讀。
parquet格式
儲存檔案的壓縮比測試:
測試資料(在我的檔案中,點開我的資訊檢視)
textfile
(1)建立表,儲存資料格式為textfile
create table log_text (
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)row format delimited fields terminated by '\t'
stored as textfile ;
(2)向表中載入資料
load data local inpath '/export/servers/datas/log.data' into table log_text ;
(3)檢視表中資料大小
dfs -du -h /user/hive/warehouse/log_parquet/
;
18.1m
orc(1)建立表,儲存資料格式為orc
create table log_orc
(track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)row format delimited fields terminated by '\t'
stored as orc ;
(2)向表中載入資料
insert into table log_orc select * from log_text ;
(3)檢視表中資料大小
dfs -du -h /user/hive/warehouse/log_orc/
;
2.8 m
parquet
(1)建立表,儲存資料格式為parquet
create table log_parquet
(track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)row format delimited fields terminated by '\t'
stored as parquet ;
(2)向表中載入資料
insert into table log_parquet select * from log_text ;
(3)檢視表中資料大小
dfs -du -h /user/hive/warehouse/log_parquet/
;
13.1m
儲存檔案的壓縮比總結:
orc > parquet > textfile
儲存檔案的查詢速度測試:
儲存檔案的查詢速度總結:查詢速度相近。
HIVE檔案儲存格式
hive檔案儲存格式包括以下幾類 textfile sequencefile rcfile orcfile 其中textfile為預設格式,建表時不指定預設為這個格式,匯入資料時會直接把資料檔案拷貝到hdfs上不進行處理。sequencefile,rcfile,orcfile格式的表不能直接從本地檔...
Hive檔案儲存格式
上圖左邊為邏輯表,右邊第乙個為行式儲存,第二個為列式儲存。行儲存的特點 查詢滿足條件的一整行資料的時候,列儲存則需要去每個聚集的字段找到對應的每個列的值,行儲存只需要找到 其中乙個值,其餘的值都在相鄰地方 所以此時行儲存查詢的速度更快。列儲存的特點 因為每個欄位的資料聚集儲存,在查詢只需要少數幾個欄...
Hive檔案儲存格式
上圖左邊為邏輯表,右邊第乙個為行式儲存,第二個為列式儲存。行儲存的特點 查詢滿足條件的一整行資料的時候,列儲存則需要去每個聚集的字段找到對應的每個列的值,行儲存只需要找到 其中乙個值,其餘的值都在相鄰地方 所以此時行儲存查詢的速度更快。列儲存的特點 因為每個欄位的資料聚集儲存,在查詢只需要少數幾個欄...