Hive有一个严格模式,在严格模式下会对可能产生较大查询结果的语句作限制,禁止其提交执行。html
查看当前的模式:算法
hive> set hive.mapred.mode; hive.mapred.mode is undefined
未定义即为false,即no-strict模式。sql
开启严格模式:优化
set hive.mapred.mode=strict;
关闭严格模式:3d
set hive.mapred.mode=undefined;
分区表的数据量一般都比较大,对分区表的查询必须使用到分区相关的字段,不容许扫描全部分区,想一想也是若是扫描全部分区的话那么对表进行分区还有什么意义呢。htm
固然某些特殊状况可能仍是须要扫描全部分区,这个时候就须要记得确保严格模式被关闭。blog
由于要保证全局有序须要将全部的数据拉到一个Reducer上,当数据集比较大时速度会很慢。我的猜想多是设置了limit N以后就会有一个很简单的优化算法:每一个Reducer排序取N而后再合并排序取N便可,可大大减小数据传输量。排序
hive不会对where中的链接条件优化为on,因此join必须带有on链接条件,不容许两个表直接相乘。 ip
.it