优化总结
当 执行 内存溢出时,可以修改 的配置文件 ,增大内存,
如下:
默认建表时的路径也可以在 里配置,如下
!
"执行 操作的时候,尽量把小表放前面,大表放前面可能会因为内存溢出而出错
对分区表进行操作需要对分区进行过滤(如:#$%%)。 特别是在 &'() 操作的时
候,分区过滤(如:#$%%)需要放到 ') 语句 或子查询 里面。不能放到 ') 后面
的 *+,-, 里,这样会扫描所有表,最后才判断分区。也就是说程序会先执行 &'() 操作,
才会执行最后的 *+,-, 操作。
.在 &'() 操作中,后面被连续 &'() 且同一字段,只会执行一个 操作。
/,0,1234-'50,42'62,-&'()!')#!0,42'62,-&'()')
#7推荐的 /,0,1234-'50,42'62,-&'()!')#!0,42'62,-
&'()')!#7效率低下的
8当一个大表和一个很小的表进行 &'() 操作的时候,使用 59:&'() 操作,这样会把小表
读入内存进行 &'(),只需要一个 操作 &'() 就完成了 3;<=3
>!>!" !#!7
?通过设置 @A 可以关闭 对于扫描表的优化,但有时候会提高效
率。默认值为 。可以视情况设置:只含有 /,0,12 的语句 或 59:&'()推荐使用
B902,-29C0,/,2/,-D,:-':,-2(,/<EF E#EE=7可以使
结果表不出现G) 字符串,而用空串代替
列裁剪(Column Pruning)
在读数据的时候,只读取查询中需要用到的列,而忽略其他列。例如,对于查询:
/,0,12>!4-'52*+,-,H7
其中,2包含 .个列 <>!>>>=,列 ,将会被忽略,只会读取 >!>列
这个选项默认为真: hive.optimize.cp = true
分区裁剪(Partition Pruning)
在查询的过程中减少不必要的分区。例如,对于下列查询:
/,0,1234-'5</,0,12>1'6)2<=4-'52I-'6:CJ=!K*+,-,
!K#7/,0,1234-'52&'()</,0,1234-'52=!K')
<2#!K=*+,-,!K#7
会在子查询中就考虑 !K#条件,从而减少读入的分区数目。
此选项默认为真:hive.optimize.pruner=true
评论5