經驗分享(7)建立hive表時格式如何選擇
阿新 • • 發佈:2018-12-12
常用的幾種格式:
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,原因就是這個特殊的優化;