分区表的设计和优化
-
普通表结构问题
- 使用分区表可以优化上述查询问题
分桶表的设计和优化
-
Join问题
-
分桶表设计
-
Join可以在同一个桶之间Join,减少不必要的判断
注意Join的字段和分桶的字段要一致
索引的优化和设计
分桶和索引常常是优于分区的,分区的粒度比较大
分桶的优化比较严格,分桶和Join的字段要一致
索引在3.0之后不再支持
分桶是哈希,索引是子列判断
-
原理
- 缺点
1、MR程序创建索引,效率较低
2、表数据更新的时候,索引表不会更新,如果查询的时候需要更新表,运行MR,效率更低了。
文件存储格式
Hive数据存储的本质还是HDFS,可以有多种存储格式,TextFile、SequenceFile、ORC、Parquet等。
-
TextFile
-
SequenceFile
-
Parquet
-
ORC
压缩算法选择
存储优化——小文件场景
存储优化——ORC索引、矢量化查询
explain可以查看执行计划
MR属性优化
本地模式
在本地执行MR在数据量小的时候可能会更快,可以开启自动模式,它会根据一系列的条件选择本地模式并行执行
Union和Join等语句可以划分为多个没有依赖关系的Stage,并行执行可以提高效率。
优化器——关联优化
CBO优化和Analyze分析器
分析器分析数据的分布等供CBO优化
谓词下推
第一个例子就是第二个的谓词下推
左/右连接或者外连接即使on条件不成立也会保留,因此谓词下推对于保留的表不会起作用,而如果在where里面是一定会起作用的
数据倾斜
某一个数据出现的频率过高
skew join将大的分开,单独使用多个任务,那么每个任务跑的join就小,即使每个很大,算下来也不大。