Hive之数据查询
Hive之数据查询
一,排序和聚合
对于排序有两种方式,一种是order by 一种是sort by
order by 会对所有的数据进行排序,所以最后会只有一个reducer来处理,如果数据量非常大,效率会非常差劲
sort by是部分排序,只是对一个reducer的数据进行排序
FROM records2
SELECT year, temperature
DISTRIBUTE BY year
SORT BY year ASC, temperature DESC;
1949 111
1949 78
1950 22
1950 0
1950 -11
关键字DISTRIBUTE主要是控制特定的行会分发到同一个reducer里面去处理,这样后面再进行聚合操作就很方便。
二,连接查询
hive> SELECT * FROM sales; -- name 购买者的名字,id购买的商品id
Joe 2
Hank 4
Ali 0
Eve 3
Hank 2
hive> SELECT * FROM things; --name 商品名称 id 商品id
2 Tie
4 Coat
3 Hat
1 Scarf
1,内连接
hive> SELECT sales.*, things.*
> FROM sales JOIN things ON (sales.id = things.id);

SELECT sales.*, things.*
FROM sales, things
WHERE sales.id = things.id;
需要注意的是对于MySQL和Oracel里面常用的等值连接方式,hive是不支持的。
2,外连接
hive> SELECT sales.*, things.*
> FROM sales LEFT OUTER JOIN things ON (sales.id = things.id);
Ali 0 NULL NULL
Joe 2 2 Tie
Hank 2 2 Tie
Eve 3 3 Hat
Hank 4 4 Coat
hive> SELECT sales.*, things.*
> FROM sales RIGHT OUTER JOIN things ON (sales.id = things.id);
NULL NULL 1 Scarf
Joe 2 2 Tie
Hank 2 2 Tie
Eve 3 3 Hat
Hank 4 4 Coat
hive> SELECT sales.*, things.*
> FROM sales FULL OUTER JOIN things ON (sales.id = things.id);
Ali 0 NULL NULL
NULL NULL 1 Scarf
Joe 2 2 Tie
Hank 2 2 Tie
Eve 3 3 Hat
Hank 4 4 Coat
3,Semi joins
先来看一个查询:
SELECT *
FROM things
WHERE things.id IN (SELECT id from sales);
注意:hive不支持这种在in中使用子查询的语法,但是下面的查询是同样的意思
hive> SELECT *
> FROM things LEFT SEMI JOIN sales ON (sales.id = things.id);
但是使用SEMI JOIN有一定的限制,就是右边的表不允许出现在select中只能出现在on从句中
4,子查询
对于子查询hive有一些限制,只能在from里面使用子查询
例如:
select total from
(select c1+c2 as total from table) my_sub_query;
子查询必须指定一个名字
一,排序和聚合
对于排序有两种方式,一种是order by 一种是sort by
order by 会对所有的数据进行排序,所以最后会只有一个reducer来处理,如果数据量非常大,效率会非常差劲
sort by是部分排序,只是对一个reducer的数据进行排序
FROM records2
SELECT year, temperature
DISTRIBUTE BY year
SORT BY year ASC, temperature DESC;
1949 111
1949 78
1950 22
1950 0
1950 -11
关键字DISTRIBUTE主要是控制特定的行会分发到同一个reducer里面去处理,这样后面再进行聚合操作就很方便。
二,连接查询
hive> SELECT * FROM sales; -- name 购买者的名字,id购买的商品id
Joe 2
Hank 4
Ali 0
Eve 3
Hank 2
hive> SELECT * FROM things; --name 商品名称 id 商品id
2 Tie
4 Coat
3 Hat
1 Scarf
1,内连接
hive> SELECT sales.*, things.*
> FROM sales JOIN things ON (sales.id = things.id);

SELECT sales.*, things.*
FROM sales, things
WHERE sales.id = things.id;
需要注意的是对于MySQL和Oracel里面常用的等值连接方式,hive是不支持的。
2,外连接
hive> SELECT sales.*, things.*
> FROM sales LEFT OUTER JOIN things ON (sales.id = things.id); Ali 0 NULL NULL
Joe 2 2 Tie
Hank 2 2 Tie
Eve 3 3 Hat
Hank 4 4 Coat hive> SELECT sales.*, things.*
> FROM sales RIGHT OUTER JOIN things ON (sales.id = things.id); NULL NULL 1 Scarf
Joe 2 2 Tie
Hank 2 2 Tie
Eve 3 3 Hat
Hank 4 4 Coat hive> SELECT sales.*, things.*
> FROM sales FULL OUTER JOIN things ON (sales.id = things.id); Ali 0 NULL NULL
NULL NULL 1 Scarf
Joe 2 2 Tie
Hank 2 2 Tie
Eve 3 3 Hat
Hank 4 4 Coat
3,Semi joins
先来看一个查询:
SELECT *
FROM things
WHERE things.id IN (SELECT id from sales); 注意:hive不支持这种在in中使用子查询的语法,但是下面的查询是同样的意思
hive> SELECT *
> FROM things LEFT SEMI JOIN sales ON (sales.id = things.id);
但是使用SEMI JOIN有一定的限制,就是右边的表不允许出现在select中只能出现在on从句中
4,子查询
对于子查询hive有一些限制,只能在from里面使用子查询
例如:
select total from
(select c1+c2 as total from table) my_sub_query;
子查询必须指定一个名字
Hive之数据查询的更多相关文章
- hive 将hive表数据查询出来转为json对象和json数组输出
一.将hive表数据查询出来转为json对象输出 1.将查询出来的数据转为一行一行,并指定分割符的数据 2.使用UDF函数,将每一行数据作为string传入UDF函数中转换为json再返回 1.准备数 ...
- Apache Hive处理数据示例
继上一篇文章介绍如何使用Pig处理HDFS上的数据,本文将介绍使用Apache Hive进行数据查询和处理. Apache Hive简介 首先Hive是一款数据仓库软件 使用HiveQL来结构化和查询 ...
- Hive 学习之路(八)—— Hive 数据查询详解
一.数据准备 为了演示查询操作,这里需要预先创建三张表,并加载测试数据. 数据文件emp.txt和dept.txt可以从本仓库的resources目录下载. 1.1 员工表 -- 建表语句 CREAT ...
- Hive 系列(八)—— Hive 数据查询详解
一.数据准备 为了演示查询操作,这里需要预先创建三张表,并加载测试数据. 数据文件 emp.txt 和 dept.txt 可以从本仓库的resources 目录下载. 1.1 员工表 -- 建表语句 ...
- 比hive快10倍的大数据查询利器presto部署
目前最流行的大数据查询引擎非hive莫属,它是基于MR的类SQL查询工具,会把输入的查询SQL解释为MapReduce,能极大的降低使用大数据查询的门槛, 让一般的业务人员也可以直接对大数据进行查询. ...
- 入门大数据---Hive数据查询详解
一.数据准备 为了演示查询操作,这里需要预先创建三张表,并加载测试数据. 数据文件 emp.txt 和 dept.txt 可以从本仓库的resources 目录下载. 1.1 员工表 -- 建表语句 ...
- Hive[4] 数据定义 HiveQL
HiveQL 是 Hive 查询语言,它不完全遵守任一种 ANSI SQL 标准的修订版,但它与 MySQL 最接近,但还有显著的差异,Hive 不支持行级插入,更新和删除的操作,也不支持事务,但 H ...
- 使用Sqoop从mysql向hdfs或者hive导入数据时出现的一些错误
1.原表没有设置主键,出现错误提示: ERROR tool.ImportTool: Error during import: No primary key could be found for tab ...
- Facebook 正式开源其大数据查询引擎 Presto
Facebook 正式宣布开源 Presto —— 数据查询引擎,可对250PB以上的数据进行快速地交互式分析.该项目始于 2012 年秋季开始开发,目前该项目已经在超过 1000 名 Faceboo ...
随机推荐
- Java多线程系列 JUC线程池07 线程池原理解析(六)
关闭“线程池” shutdown()的源码如下: public void shutdown() { final ReentrantLock mainLock = this.mainLock; // ...
- day4 内置函数 迭代器&生成器 yield总结 三元运算 闭包
内置函数: 内置函数 # abs()返回一个数字的绝对值.如果给出复数,返回值就是该复数的模. b = -100 print(b) print(abs(b)) # all() 所有为真才为真,只要有一 ...
- in型子查询陷阱,exists子查询
in 型子查询引出的陷阱 select goods_id from goods where cat_id in (1,2,3) 直接用id,不包含子查询,不会中陷阱 题: 在ecshop商城表中,查询 ...
- SrpingCloud 之SrpingCloud config分布式配置中心搭建
1.搭建git环境 目的:持久化存储配置文件信息 采用码云 创建后 继续创建文件夹 用来区分不同的项目 下面就是git上存放配置文件了.环境的区分 dev sit pre prd 开发 ...
- 【转】HTTP方法
[转]HTTP方法 掌握HTTP虽然不是必须的,但是如果你知道它的工作原理,那么在学习JSP开发中的某些知识就可以易如反掌了. 一,HTTP协议详解之URL篇 http(超文本传输协议)是一个基于请求 ...
- Sqoop-1.4.4工具import和export使用详解
转自:http://blog.csdn.net/wodatoucai/article/details/46343291 Sqoop可以在HDFS/Hive和关系型数据库之间进行数据的导入导出,其中主要 ...
- form 中Enctype=multipart/form-data 的作用
form 中Enctype=multipart/form-data 的作用 ENCTYPE="multipart/form-data"用于表单里有图片上传. <form na ...
- java:练习学校学生
java:练习学校学生 一个学生对应一个学校 一个学校对应多个学生 Student类,School类,Demo测试类 Student: public class Student { private S ...
- JS字符串转换成数字
方法主要有三种 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只有 ...
- VS2013修改resource之后产生designer1.cs
1. Unload project2. Edit the csproj file.3. Search for <LastGenOutput>test1.Designer.cs</La ...