Hive分区测试
对大量数据进行查询时,Hive在查询时,会转换成mapreduce任务运行,会显得比较慢。可以通过分区来进行速度上的优化。
分区表建立
新建分区表trans.trans201702
1 | create table trans.trans201702 ( |
从trans.test201702查询出wcode=’000002.SZ’的数据,然后插入trans.trans201702。
1 | insert overwrite table trans.trans201702 partition (wcode='000002.SZ',trans_date='20170203') |
在创建分区时,hive会进行mapreduce任务。
查看分区表
删除错误的分区:
1 | alter table trans201702 drop partition(wcode='600208.SZ',trans_date=20170203); |
查询性能比较
原始查询:
1 | select * from trans.test201702 where wcode='000002.SZ'; |
会进行mapreduce任务
分区后:
1 | select * from trans.trans201702 where wcode='000002.SZ'; |
查询时间相比没有创建分区前大幅缩短。
分区之后基本解决了股票的查询速度缓慢的问题
建议
Hive分区操作就是实际上就是分目录,把一个大的数据集根据业务需要分割成更小的数据集,在这个过程中会创建很多分区的文件夹,如果分区过多,文件夹又太小,不利于发挥hadoop的优势,可能造成性能的损耗。建议将trans数据按照股票代码进行分区。
可以通过修改动态分区大小数目和文件来调整hive支持的分区数量。