目录
3、如果原来创建表的时候没有指定压缩,后续可以通过修改表属性的方式添加压缩
1、设置压缩和自动分区
set parquet.compression=snappy;
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
2、创建带压缩的parquet table
create table mytable(a int,b int) stored as parquet tblproperties('parquet.compression'='snappy');
3、如果原来创建表的时候没有指定压缩,后续可以通过修改表属性的方式添加压缩
alter table mytable set tblproperties ('parquet.compression'='snappy');
4、数据压缩对比
22.1 M 66.4 M /user/hive/warehouse/zxd_test.db/etl_user_active_day
7.6 M 22.8 M /user/hive/warehouse/zxd_test.db/etl_user_active_parquet
5.3 M 16.0 M /user/hive/warehouse/zxd_test.db/etl_user_active_parquet_snappy
20.1 M 60.3 M /user/hive/warehouse/zxd_test.db/etl_user_active_rcfile
20.1 M 60.3 M /user/hive/warehouse/zxd_test.db/etl_user_active_rcfile_snappy
3.2 M 9.6 M /user/hive/warehouse/zxd_test.db/etl_user_active_orc_snappy
23.3 M 69.9 M /user/hive/warehouse/zxd_test.db/etl_user_active_sequencefile
23.3 M 69.9 M /user/hive/warehouse/zxd_test.db/etl_user_active_sequencefile_snappy
5、查询除了其中某个字段剩余所有字段
#由于etl_user_active_day表是分区表,需要将day分区字段排除
set hive.support.quoted.identifiers=None;
set parquet.compression=snappy;
insert overwrite table etl_user_active_rcfile_snappy select `(day)?+.+` from etl_user_active_day;
6、SQL查询时间
select count(*) from table;
text :Time taken: 21.743 seconds, Fetched: 1 row(s)
parquet :Time taken: 20.855 seconds, Fetched: 1 row(s)
orc : Time taken: 19.951 seconds, Fetched: 1 row(s)
由于数据量小 MapReduce启动都花了10几秒了,但也可以看出 parquet和orc的性能较好
总结:压缩和自动分区都是hive常用的优化手段,既节省空间有提高检索数据
但是为了不改变元数据的分割性,常见的组合压缩是parquet + snappy、orc + snappy。