1. 什么是Hive的严格模式
- hive中的一种模式,在该模式下禁止一些不好SQL的执行。
2. Hive的严格模式不允许哪些SQL执行
2.1 禁止分区表全表扫描
- 分区表往往数据量大,如果不加分区查询会带来巨大的资源消耗 。例如以下分区表
SELECT DISTINCT(planner_id) FROM fracture_ins WHERE planner_id=5;
FAILED: Error in semantic analysis: No Partition Predicate Found for Alias “fracture_ins” Table "fracture_ins
SELECT DISTINCT(planner_id) FROM fracture_ins WHERE planner_id=5
AND hit_date=20120101;
2.2 禁止排序不加limit
- 排序最终是要都进到一个Reduce中操作,防止reducer额外执行很长一段时间
SELECT * FROM fracture_ins WHERE hit_date>2012 ORDER BY planner_id;
FAILED: Error in semantic analysis: line 1:56 In strict mode,limit must be specified if ORDER BY is present planner_id
hive> SELECT * FROM fracture_ins WHERE hit_date>2012 ORDER BY planner_id LIMIT 100000;
2.3 禁止笛卡尔积
笛卡尔积是什么: A={a,b}, B={0,1,2},则 A×B={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}
SELECT * FROM fracture_act JOIN fracture_ads;
SELECT * FROM fracture_act JOIN fracture_ads WHERE fracture_act.planner_id = fracture_ads.planner_id;
3. Hive的严格模式怎样开启
set hive.mapred.mode=strict;
|