hive select查询语句底层实现的某些细微差别

最近,由于工作的需要,学习了基于Hadoop的一个数据仓库工具hive。遇到并解决了一些问题,但是有个select语句的细微差别值得注意。

首先来看两条hql语句:

SELECT * FROM MY_TABLE where dt=2014031205 limit 10     SELECT ID,NAME,GENDER,USERNAME,PASSWORD,ISVALID FROM MY_TABLE where dt=2014031205 limit 10

理论上,上述两条hql查询语句的查询结果应该是一致的,这也正是我们所期待。其中dt为分区字段名。

但是当hive建表时没有指定location(根路径)并且hive数据库表与对应的hdfs文件(表的关联数据文件)分别在两个不同的hadoop集群的时候,上述两条hql语句会产生截然不同的结果。前面一条hql语句会查询到正确的结果,但是第二条hql语句会报如下类似的异常:

java.io.FileNotFoundException: File does not exist: /2014031205/201403120538.txt

从异常提示可以看出SELECT加指定字段名查询时,其底层MapReduce实现使用的是相对路径。而SELECT * 底层实现使用的是绝对路径。

解决办法:

1、建表时指定location根路径。

2、将hive数据库和对应的hdfs文件系统放到一个hadoop集群上。

hive select查询语句底层实现的某些细微差别,布布扣,bubuko.com

时间: 2024-10-07 05:26:54

hive select查询语句底层实现的某些细微差别的相关文章

MySQL学习笔记(10)之select查询语句

select查询语句 格式: Select 选项 字段列表 from.where like.group by.haring.order by.limit: 字段列表:select * from 表名: Select (字段名) from 表名: 字段部分可参与的运算. Select 字段±数字 from 表名: 1.别名: Select 字段名 as 别名 from 表名: 2.From子句: 查询多个表: select 表1.字段1,表1.字段2...表2.字段1... From 表1,表2:

使用explain查询select查询语句执行计划

1.使用explain查询select查询语句执行计划 mysql> select * from baba where name ='fjdsjf'; +------+--------+ | id   | name   | +------+--------+ |    1 | fjdsjf | +------+--------+ 查询该sql语句的执行计划 mysql> explain select * from baba where name ='fjdsjf' \G; **********

create table 使用select查询语句创建表的方法分享

转自:http://www.maomao365.com/?p=6642 摘要:下文讲述使用select查询语句建立新的数据表的方法分享 ---1 mysql create table `新数据表名` select * from `旧数据表名`; -------------------------------- ---2 oracle create table 新数据表名 as select * from 旧数据表名 -------------------------------- --3 mss

Hive通过查询语句向表中插入数据过程中发现的坑

前言 最近在学习使用Hive(版本0.13.1)的过程中,发现了一些坑,它们或许是Hive提倡的比关系数据库更加自由的体现(同时引来一些问题),或许是一些bug.总而言之,这些都需要使用Hive的开发人员额外注意.本文旨在列举我发现的2个通过查询语句向表中插入数据过程中的问题,希望大家注意. 数据准备 为了验证接下来出现的问题,需要先准备两张表employees和staged_employees,并准备好测试数据.首先使用以下语句创建表employees: create table employ

转载《mysql 一》:mysql的select查询语句内在逻辑执行顺序

原文:http://www.jellythink.com/archives/924 我的抱怨 我一个搞应用开发的,非要会数据库,这不是专门的数据库开发人员干的事么?话说,小公司也没有数 据库开发人员这么个职位吧.好吧,对数据库最深的印象还停留在大学<数据库原理>这堂课上,什么第一范式,第二范式…,这些理论的东西,多多少少还是记得 点,至于更深层次的,我不会.所以呢,撸起袖子,开始学习吧. 干程序员,最不怕的就是学习,如果你连学习都怕了,那还是早点退出这行吧.你说是吧.而我今天这篇文章,既不总结

select查询语句

select语句 查询语句的比较完整的语法: select [select选项] *|字段列表 [as 字段别名] from 数据源 [where子句][group by子句][having子句][order by子句][limit子句]; select选项: all:也是缺省值(默认值),保留所有的查询结果! distinct:去重,去掉重复的查询结果! [as]  别名 where子句 MySQL支持以下的运算符: 关系运算符 <  > <=  >= =   !=(<&g

select查询语句执行顺序

查询中用到的关键词主要包含六个,并且他们的顺序依次为select--from--where--group by--having--order by其中select和from是必须的,其他关键词是可选的,这六个关键词的执行顺序与sql语句的书写顺序并不是一样的,而是按照下面的顺序来执行 from--where--select--group by--having--order by, from:需要从哪个数据表检索数据where:过滤表中数据的条件 , rownum分配给每个输出行并增1select

MySQL命令:select查询语句

SQL 中最常用的 SELECT 语句,用来在表中选取数据. 要记得的知识点如下: SELECT 语句格式: SELECT 要查询的列名 FROM 表名字 WHERE 限制条件: WHERE语句后: 数学符号条件:=       >       <       >=        <=         between and 逻辑符:AND  /  OR  /  IN  /  NOT IN 通配符:LIKE  +  _  .% 排序:ORDER BY + ASC.DPSC SQL

JavaEE.sql.Select查询语句

SELECT语句 语法格式 //选择字段 SELECT column1, column2, ... FROM table_name; //全表 SELECT * FROM table_name; S1.全表查询 SELECT * FROM test_master S2.选择查询 SELECT id, userName, bindNo FROM test_master S3.连表查询 SELECT m.id, m.userName, m.bindNo, s.registerDate FROM te