hive的严格模式和分区

2020-01-09  本文已影响0人  echolvan

相比mysql,hive有严格模式存在,为了不错误扫描整个数据,hive的分区表会将数据分成几个分区。
查询分区表中的数据时,除非where语句中包含分区字段过滤条件来显示数据范围,否则不允许执行。也就是说用户不允许扫描所有的分区。进行这个限制的原因是,通常分区表都拥有非常大的数据集,而且数据增加迅速,如果没有进行分区限制的查询会消耗很大的资源来处理这个表

动态分区和静态分区的区别

静态分区

动态分区

非严格模式

在查询数据时无需加where条件指定分区。默认情况下hive就是非严格模式。

严格模式

可以防止在查询数据时因为误操作扫描整个数据。(你知道的,当数据很大时,扫描所有数据会非常耗时间)

设置严格模式

我们在没设置初始化文件.hiverc的时候,在hive命令行中输入

set hive.mapred.mode=strict;

但是这种方法不是很可靠,因为他只存在在这一次hive中,当你关闭hive后再打开,他就会恢复成默认。那么我们需要修改hive启动的初始化文件.hiverc
这个文件在: hive的安装文件夹中/bin
写入

# 在命令行中显示当前数据库名
set hive.cli.print.current.db=true; 
 # 查询出来的结果显示列的名称
set hive.cli.print.header=true;
# 设置hive执行的严格模式
set hive.mapred.mode=strict;
上一篇 下一篇

猜你喜欢

热点阅读