1. 程式人生 > >經驗分享(7)建立hive表時格式如何選擇

經驗分享(7)建立hive表時格式如何選擇

常用的幾種格式:

textfile

需要定義分隔符,佔用空間大,讀寫效率最低,非常容易發生衝突(分隔符)的一種格式,基本上只有需要匯入資料的時候才會使用,比如匯入csv檔案;

json

需要匯入jar,http://www.congiu.net/hive-json-serde/,佔用空間最大,讀寫效率低,基本上只有需要匯入資料的時候才會使用,比如匯入json檔案;

ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
STORED AS TEXTFILE

orc

列式儲存,佔用空間最小,非常適合用來做數倉;

parquet

列式儲存,佔用空間居中,如果後期使用spark來處理,parquet是最佳格式;

 

相同資料規模(1700w行)和查詢條件(count+distinct+where+group by)下,4種格式的儲存(不啟用壓縮)和查詢效率如下:

  txt json orc parquet
資料大小 2.7G 3.4G 149.6M 702.7M
hive資料寫入時間 148s 122s 206s 39s
hive查詢 32s 49s 35s 37s
spark查詢 12s 22s 12s 8s

 

為什麼spark對parquet支援更好,可以通過檢視執行計劃,在查詢txt、json、orc表的時候,使用的是HiveTableScan,在查詢parquet表時,使用的是FileScan parquet,原因就是這個特殊的優化;