Hive严格模式

Hive严格模式

Hive提供了一个严格模式,可以防止用户执行那些可能产生意向不到的不好的效果的查询。说通俗一点就是这种模式可以阻止某些查询的执行。通过如下语句设置严格模式:

[java] view plain copy

  1. hive> set hive.mapred.mode=strict;

设置为严格模式后,可以禁止3种类型的查询:

(1):带有分区的表的查询

如果在一个分区表执行hive,除非where语句中包含分区字段过滤条件来显示数据范围,否则不允许执行。换句话说就是在严格模式下不允许用户扫描所有的分区。进行这个限制的原因是,通常分区表都拥有非常大的数据集,而且数据增加迅速。如果不进行分区限制的查询会消耗巨大的资源来处理,如下不带分区的查询语句:

[java] view plain copy

  1. hive> SELECT DISTINCT(planner_id) FROM fracture_ins WHERE planner_id=5;

执行后会出现如下错误:

[java] view plain copy

  1. FAILED: Error in semantic analysis: No Partition Predicate Found for Alias "fracture_ins" Table "fracture_ins

解决方案是在where中增加分区条件:

[java] view plain copy

  1. hive> SELECT DISTINCT(planner_id) FROM fracture_ins
  2. > WHERE planner_id=5 AND hit_date=20120101;

(2):带有order by的查询

对于使用了order by的查询,要求必须有limit语句。因为order by为了执行排序过程会将所有的结果分发到同一个reduce中进行处理,强制要求用户增加这个limit语句可以防止reduce额外消耗资源,如下是不带limit关键字的查询语句:

[java] view plain copy

  1. hive> SELECT * FROM fracture_ins WHERE hit_date>2012 ORDER BY planner_id;

出现如下错误:

[java] view plain copy

  1. FAILED: Error in semantic analysis: line 1:56 In strict mode,
  2. limit must be specified if ORDER BY is present planner_id

解决方案就是增加一个limit关键字:

[java] view plain copy

  1. hive> SELECT * FROM fracture_ins WHERE hit_date>2012 ORDER BY planner_id
  2. > LIMIT 100000;

(3):限制笛卡尔积的查询

对关系型数据库非常了解的用户可能期望在执行join查询的时候不适用on语句而是使用where语句,这样关系型数据库的执行优化器就可以高效的将where语句转换成那个on语句了。不幸的是,Hive并不支持这样的优化,因为如果表非常大的话,就会出现不可控的情况,如下是不带on的语句:

[java] view plain copy

  1. hive> SELECT * FROM fracture_act JOIN fracture_ads
  2. > WHERE fracture_act.planner_id = fracture_ads.planner_id;

出现如下错误:

[java] view plain copy

  1. FAILED: Error in semantic analysis: In strict mode, cartesian product
  2. is not allowed. If you really want to perform the operation,
  3. +set hive.mapred.mode=nonstrict+

解决方案就是加上on语句:

[java] view plain copy

    1. hive> SELECT * FROM fracture_act JOIN fracture_ads
    2. > ON (fracture_act.planner_id = fracture_ads.planner_id);
时间: 2024-10-13 10:26:39

Hive严格模式的相关文章

Hive本地模式安装及遇到的问题和解决方案

Apache Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行. 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析. Hive有三种运行模式: 1.内嵌模式:将元数据保存在本地内嵌的Derby数据库中,这得使用Hive最简单的方式,不过使用内嵌模式的话,缺点也比较明显,因为一个内嵌的D

安装Hive(独立模式 使用mysql连接)

安装Hive(独立模式 使用mysql连接) 1.默认安装了java+hadoop 2.下载对应hadoop版本的安装包 3.解压安装包 tar zxvf apache-hive-1.2.1-bin.tar.gz 4.安装mysql yum -y install mysql-server mysql mysqldev //需要以root身份运行 另外可能需要配置yum源 mysql常用命令: service mysqld start/stop chkconfig mysqld on //加入开机

解决hive交互模式退格键乱码

在hive的交互模式下,输入退格.方向键等,出现乱码,可以通过如下方法解决: 1.修改bashrc文件: vi ~/.bashrc 在文件最后添加一行: stty erase ^H. 2.使修改生效: source ~/.bashrc 这样,就不会乱码了.

HBase完全分布式安装以及Hive远程模式(mysql作为数据库)的安装

各位真的不好意思.上次的博文有误.上次的应该是HBase的伪分布式安装.这次本人保证是完全分布式安装. 首先是HBase的完成分布式安装.这次部署的环境是hadoop-1.2.1+hbase-0.98.X.因为这个版本的HBase是直接对应hadoop-1.2.1,故也就省去了覆盖jar包的步骤以及排除了覆盖带来的不稳定性.OK,下载后解压,进入conf目录,配置hbase-env.sh文件.如图.这里HBASE_CLASSPATH是指向hadoop的conf目录的,这点需要注意. 下面是打开z

HIve安装模式

Hive的安装模式: 1. 嵌入模式:HIve将元信息存储到自带derby数据库中,只能创建一个连接,只用于演示使用 2. 本地模式:元信息被存在Mysql数据库,Mysql数据库与HIve运行在同一台物理机器上,可以建立多个连接 3. 远程模式:元信息被保存在Mysql库中,HIve和Mysql运行在不通操作系统.一般用于实际生产环境中.  HIve远程安装 1. 在Mysql中创建库存储Hive元信息 2. 将Mysql驱动jar包上传到HIve所在的lib目录下 3. 在Hive下conf

阿里云ECS服务器部署HADOOP集群(四):Hive本地模式的安装

本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建. 本地模式需要采用MySQL数据库存储数据. 1 环境介绍 一台阿里云ECS服务器:master 操作系统:CentOS 7.3 Hadoop:hadoop-2.7.3.tar.gz Java: jdk-8u77-linux-x64.tar.gz Hive:apache-hive-2.3.6-bin.tar.gz Mysql: Mysql 5.7 MySQL Connector-J:mysql-

Hive Remote模式搭建

一.实验环境 1.软件版本:apache-hive-2.3.0-bin.tar.gz.mysql-community-server-5.7.19 2.mysql JDBC驱动包:mysql-connector-java-5.1.44.tar.gz 3.mysql已经安装在hadoop5上 4..主机规划 hadoop3 Remote:client hadoop4 Remote:client hadoop5 Remote:server:mysql 二.基础配置 1.解压并移动hive [[emai

Hive基础之Hive体系架构&运行模式&Hive与关系型数据的区别

Hive架构 1)用户接口: CLI(hive shell):命令行工具:启动方式:hive 或者 hive --service cli ThriftServer:通过Thrift对外提供服务,默认端口是10000:启动方式:hive --service hiveserver WEBUI(浏览器访问hive):通过浏览器访问hive,默认端口是9999:启动方式:hive --service hwi 2)元数据存储(Metastore):启动方式:hive -service metastore

【大数据系列】Hive安装及web模式管理

HQL的执行过程: 解释器.编译器.优化器完成HQL查询语句从词法分析.语法分析.编译.优化以及查询计划(Plan)的生成.生成的查询计划存储在HDFS中,并随后有MapReduce调用执行. HQL Select-->发送到解析器进行词法分析 -->错误则反映 否则发送到编译器 生成HQL的执行计划-->优化器 生成最佳的执行计划 -->执行 explain plan for select * from emp where deptno=10; --查看执行计划 select *