Hive严格模式

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

  
 Hive提供了一个严格模式,可以防止用户执行那些可能意向不到的不好的影响的查询。
        通过设置属性hive.mapred.mode值为默认是非严格模式 nonstrict 。开启严格模式需要修改hive.mapred.mode值为 strict , 开启严格模式可以禁止3种类型的查询。
<property>
     <name>hive.mapred.mode</name>
     <value>strict</value>
     <description>
     The mode in which the Hive operations are being performed. 
     In strict mode, some risky queries are not allowed to run. They include:
         Cartesian Product.
         No partition being picked up for a query.
         Comparing bigints and strings.
         Comparing bigints and doubles.
         Orderby without limit.
     </description>
 </property>
1)对于分区表, 除非where语句中含有分区字段过滤条件来限制范围,否则不允许执行。 换句话说,就是用户不允许扫描所有分 区。进行这个限制的原因是,通常分区表都拥有非常大的数据集,而且数据增加迅速。没有进行分区限制的查询可能会消耗令人 不可接受的巨大资源来处理这个表。
2)对于 使用了order by语句的查询,要求必须使用limit语句。 因为order by为了执行排序过程会将所有的结果数据分发到同一个 Reducer中进行处理,强制要求用户增加这个LIMIT语句可以防止Reducer额外执行很长一段时间。
3) 限制笛卡尔积的查询。 对关系型数据库非常了解的用户可能期望在执行JOIN查询的时候不使用ON语句而是使用where语句, 这样关系数据库的执行优化器就可以高效地将WHERE语句转化成那个ON语句。不幸的是,Hive并不会执行这种优化,因此,如 果表足够大,那么这个查询就会出现不可控的情况。
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值