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

    .

  • 相关阅读:
    ZOJ 2158 Truck History
    Knight Moves (zoj 1091 poj2243)BFS
    poj 1270 Following Orders
    poj 2935 Basic Wall Maze (BFS)
    Holedox Moving (zoj 1361 poj 1324)bfs
    ZOJ 1083 Frame Stacking
    zoj 2193 Window Pains
    hdu1412{A} + {B}
    hdu2031进制转换
    openjudge最长单词
  • 原文地址:https://www.cnblogs.com/cc11001100/p/9434120.html
Copyright © 2011-2022 走看看