HIVE如何开启严格模式:hive-site.xml中添加:
<property>
<name>hive.mapred.mode</name>
<value>strict</value>
</property>
为什么要开启严格模式?是为了防止用户执行那些可能会过多消耗集群资源的查询。
HIVE开启严格模式后——
(1) 查询有分区的表,必须where条件里包含分区字段,否则不予执行
(2) 带有order by的查询必须有limit语句,否则不予执行
(3) 会限制笛卡尔积的查询,就是说join查询中只有where而没有ON,这是不允许的,严格模式下的查询必须加上ON,下面是验证
hive> SELECT * FROM user_click JOIN bought WHERE user_click.planner_id = bought.planner_id; FAILED: Error in semantic analysis: In strict mode, cartesian product is not allowed. If you really want to perform the operation, +set hive.mapred.mode=nonstrict+
但是我有某些表,它分区数不多,仍然希望通过msck repair来修复分区,怎么办?在开启了严格模式的Hive下可以通过在msck之前为当前的hive会话设置一下就可以:set hive.mapred.mode=nonstrict;
以下是验证过程——
选其中一个dw_开头的数仓专用表来测试一下:在HIVE开启了严格模式的前提下是否还能使用msck
[hive@tony_cluster-01 sql]$ grep --color msck 2018-10-23.11.sql | head
msck repair table dw_data.button_click
;
msck repai