首页 > 代码库 > 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中,并且是处于最后一个字段。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。