经验分享(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,原因就是这个特殊的优化;

猜你喜欢

转载自www.cnblogs.com/barneywill/p/10109508.html