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程序实现Unicode码和中文互相转换
根据前一篇的补充问题http://blog.csdn.net/fancylovejava/article/details/10142391 有了前一篇文章的了解,大概了解了unicode编码格式了 ...
- Oracle数据库体系结构(6)数据库归档重做日志文件管理
归档重做日志文件的概念和选择 Oracle数据库能够把已经写满了的重做日志文件保存到一个或多个指定的离线位置,这种保存的文件为归档重做日志文件.通常情况下一个归档重做日志时一个被LGWR写满的重做日志 ...
- C#判断VS是否处于设计模式
public class CheckDesingModel { public static bool IsDesingMode() { bool ReturnFlag = false; if (Lic ...
- /etc/apt/sources.list
今天学习: 在Ubuntu下软件源的文件是/etc/apt/sources.list,那么sourdces.list.d目录下的文件又是什么作用呢? 该文件夹下的文件是第三方软件的源,可以分别存放不同 ...
- Delphi 中关闭指定进程的方法
Uses Windows, SysUtils, Tlhelp32 ; Function KillTask( ExeFileName: String ): Integer ; //关闭进程 Functi ...
- 表达式语句(EL)
EL的基本语法 ${expression} Expression:制定要输出的变了或字符串.或EL运算符组成的表达式. 禁用EL表达式: 1. 使用“\”符号禁用. \${expression} 2. ...
- python第九篇:Python进程
Python进程 接下来我主要按照下图中思维导图上的关键点对进程和线程进行一个总结 进程知识点总结: 一.Python进程 1.概念 程序和进程: 程序:是可执行文件,是静态的,占据磁盘空间,程序 ...
- Codeforces 914C Travelling Salesman and Special Numbers:数位dp
题目链接:http://codeforces.com/problemset/problem/914/C 题意: 对数字x进行一次操作,可以将数字x变为x在二进制下1的个数. 显然,一个正整数在进行了若 ...
- 分布式系统的Raft算法——在失联阶段这个老Leader的任何更新都不能算commit,都回滚,接受新的Leader的新的更新 意味着还是可能丢数据!!!
过去, Paxos一直是分布式协议的标准,但是Paxos难于理解,更难以实现,Google的分布式锁系统Chubby作为Paxos实现曾经遭遇到很多坑. 来自Stanford的新的分布式协议研究称为R ...
- 使用common-dbutils进行dao操作
jar: 先引出database工具类: package cn.itcast.utils; public class Stu { private int id; private String snam ...