首页 > 代码库 > Hive架构层面优化之五合理设计表分区(静态分区和动态分区)

Hive架构层面优化之五合理设计表分区(静态分区和动态分区)

合理建表分区有效提高查询速度。

 

重要数据采用外部表存储,CREATE EXTERNAL TABLE,数据和表只是一个location的关联,drop表后数据不会丢失;

内部表也叫托管表,drop表后数据丢失;所以重要数据的表不能采用内部表的方式存储。

 

在全天的数据里查询某个时段的数据,性能很低效------可以通过增加小时级别的分区来改进!

 

Trackreal为例,有三个分区:

日增量: 按日期分区;

小时增量:按日期、小时分区;

10分钟增量:按日期、小时、step分区;每个小时要导6次。

 

场景:大量小时级别作业访问trackinfo,但是trackinfo是按日增量的,性能很低下。

解决方案:在按日分区的前提下,改造成trackinfo_hour表添加按小时分区;

 

最佳实践:

凌晨1点到7点(XX省份生产测试,数据从凌晨1点开始跑到早上7点能跑完离线作业),由于有很多日执行的作业需要执行,故集群会很忙,此时不允许小时级别的作业执行;10点之后再执行小时级别的作业,0点到9点的时候此时再补跑,可以采用动态分区(主分区采用静态分区即按日分区,次分区为动态分区)

案例:

insert overwrite table trackinfo_hour partition(ds=‘${today}‘,hour)select .... , hourfrom tmp_trackinfo_hour

动态分区使用注意事项:动态分区字段必须要出现在select中,并且是处于最后一个字段