无题

大数据-hive

hive.mapred.mode 严格模式

1
2
3
4
5
6
7
8
9
hive> set hive.mapred.mode;
hive.mapred.mode is undefined
未定义即为false,即no-strict模式。

开启严格模式:
set hive.mapred.mode=strict;

关闭严格模式:
set hive.mapred.mode=undefined;
1
2
3
4
5
6
7
8
1.对分区表的查询必须使用到分区相关的字段
分区表的数据量通常都比较大,对分区表的查询必须使用到分区相关的字段,不允许扫描所有分区,想想也是如果扫描所有分区的话那么对表进行分区还有什么意义呢。

2.order by必须带limit
因为要保证全局有序需要将所有的数据拉到一个Reducer上,当数据集比较大时速度会很慢。个人猜测可能是设置了limit N之后就会有一个很简单的优化算法:每个Reducer排序取N然后再合并排序取N即可,可大大减少数据传输量

3. 禁止笛卡尔积查询(join必须有on连接条件)
join必须带有on连接条件,不允许两个表直接相乘