HIVE开启严格模式后如何使用msck修复分区

本文介绍了在Hive开启严格模式后,如何通过设置会话模式临时变为非严格来执行msck repair命令修复分区。在严格模式下,查询分区表需包含分区字段,order by需配合limit,且禁止无ON条件的join。通过在执行msck之前设置`set hive.mapred.mode=nonstrict;`,可以成功修复分区。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值