zoukankan      html  css  js  c++  java
  • Hive笔记之严格模式(strict mode)

    Hive有一个严格模式,在严格模式下会对可能产生较大查询结果的语句做限制,禁止其提交执行。

    一、切换严格模式

    查看当前的模式:

    hive> set hive.mapred.mode;
    hive.mapred.mode is undefined

    未定义即为false,即no-strict模式。

    开启严格模式:

    set hive.mapred.mode=strict; 

    关闭严格模式:

    set hive.mapred.mode=undefined;

    二、严格模式严格在哪里

    1. 对分区表的查询必须使用到分区相关的字段

    分区表的数据量通常都比较大,对分区表的查询必须使用到分区相关的字段,不允许扫描所有分区,想想也是如果扫描所有分区的话那么对表进行分区还有什么意义呢。

    当然某些特殊情况可能还是需要扫描所有分区,这个时候就需要记得确保严格模式被关闭。

    image

    2. order by必须带limit

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

    image

    3. 禁止笛卡尔积查询(join必须有on连接条件)

    hive不会对where中的连接条件优化为on,所以join必须带有on连接条件,不允许两个表直接相乘。

    image

    .

  • 相关阅读:
    脏读一
    Tomcat7基于Redis的Session共享实战二
    Tomcat7基于Redis的Session共享实战一
    SQL优化经验
    Java Collections.sort方法对list集合排序
    Redis应用场景一
    Redis 发布订阅用法
    关于消息队列的使用
    Mysql日常开发注意要点
    中药处方
  • 原文地址:https://www.cnblogs.com/cc11001100/p/9434120.html
Copyright © 2011-2022 走看看