hive支援的儲存數的格式主要有:textfile sequencefile orc parquet
1.列式儲存和行式儲存
右邊第乙個為行式儲存,第二個為列式儲存
行儲存的特點: 查詢滿足條件的一整行資料的時候,列儲存則需要去每個聚集的字段找到對應的每個列的值,行儲存只需要找到其中乙個值,其餘的值都在相鄰地方,所以此時
行儲存查詢的速度更快。列儲存的特點: 因為每個欄位的資料聚集儲存,在查詢只需要少數幾個欄位的時候,能大大減少讀取的資料量;每個欄位的資料型別一定是相同的,列式儲存可以針對性的設計更好的設計壓縮演算法
textfile 和 sequencefile 的儲存格式都是基於行儲存的
orc和 parquet 是基於列式儲存的
2.testfile格式
預設格式,資料不做壓縮,磁碟開銷大,資料解析開銷大。可結合 gzip、bzip2 使用(系統自動檢查,執行查詢時自動解壓),但使用這種方式,hive 不會對資料進行切分,從而無法對資料進行並行操作
3.orc格式
orc (optimized row columnar)是 hive 0.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,即從後往前讀
4.parquet格式
parquet 是面向分析型業務的列式儲存格式,由 twitter 和 cloudera 合作開發,2015 年 5月從 apache 的孵化器裡畢業成為 apache 頂級專案。
parquet 檔案是以二進位制方式儲存的,所以是不可以直接讀取的,檔案中包括該檔案的資料和元資料,因此 parquet 格式檔案是自解析的。
上圖展示了乙個 parquet 檔案的內容,乙個檔案中可以儲存多個行組,檔案的首位都是該檔案的 magic code,用於校驗它是否是乙個 parquet 檔案,footer length 記錄了檔案元資料的大小,通過該值和檔案長度可以計算出元資料的偏移量,檔案的元資料中包括每乙個行組的元資料資訊和該檔案儲存資料的 schema 資訊。除了檔案中每乙個行組的元資料,每一頁的開始都會儲存該頁的元資料,在 parquet 中,有三種型別的頁:資料頁、字典頁和索引頁。資料頁用於儲存當前行組中該列的值,字典頁儲存該列值的編碼字典,每乙個列塊中最多包含乙個字典頁,索引頁用來儲存當前行組下該列的索引,目前 parquet 中還不支援索引頁
HIVE檔案儲存格式
hive檔案儲存格式包括以下幾類 textfile sequencefile rcfile orcfile 其中textfile為預設格式,建表時不指定預設為這個格式,匯入資料時會直接把資料檔案拷貝到hdfs上不進行處理。sequencefile,rcfile,orcfile格式的表不能直接從本地檔...
Hive檔案儲存格式
上圖左邊為邏輯表,右邊第乙個為行式儲存,第二個為列式儲存。行儲存的特點 查詢滿足條件的一整行資料的時候,列儲存則需要去每個聚集的字段找到對應的每個列的值,行儲存只需要找到 其中乙個值,其餘的值都在相鄰地方 所以此時行儲存查詢的速度更快。列儲存的特點 因為每個欄位的資料聚集儲存,在查詢只需要少數幾個欄...
Hive檔案儲存格式
上圖左邊為邏輯表,右邊第乙個為行式儲存,第二個為列式儲存。行儲存的特點 查詢滿足條件的一整行資料的時候,列儲存則需要去每個聚集的字段找到對應的每個列的值,行儲存只需要找到 其中乙個值,其餘的值都在相鄰地方 所以此時行儲存查詢的速度更快。列儲存的特點 因為每個欄位的資料聚集儲存,在查詢只需要少數幾個欄...