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 ...
随机推荐
- log4j中怎样将信息写入到不同的日志文件
log4j中怎样将信息写入到不同的日志文件 有没有想过为什么我们用:Logger logger = Logger.getLogger(ABC.class) ;来得到 logger? 不想只看人家的 d ...
- python 3 封装
python 3 封装 从封装本身的意思去理解,封装就好像是拿来一个麻袋,把小鱼,小虾,小王八,一起装进麻袋,然后把麻袋封上口子.照这种逻辑看,封装=‘隐藏’,这种理解是相当片面的. 先看如何隐藏 在 ...
- OSI模型网络分层
OSI TCP/IP --- ------- 应用层 表示层 应用层 会话层 ----- ------- 传输层 TCP UDP ----- ------- 网络层 IPv4/IPv6 ----- - ...
- Unity 中 GetComponentsInChildren 的应用
在实际项目中,我们经常要去查找一个节点下的某个子节点,但是子节点太多,或者每次我们都要去自己写GameObject.FindChald("xxx")实在是太过繁琐,那么这是后就可以 ...
- Spring Cloud之Zuul网关集群
Nginx+Zuul 一主一备 或者 轮训多个 在微服务中,所有服务请求都会统一到Zuul网关上. Nginx 配置: #user nobody; worker_processes 1; #error ...
- MS-SQL charindex的用法
select * from table_a where charindex('a',id)>0 or charindex('b',id)>0 table_a 表中 id字段中含有" ...
- github与eclipse结合使用
github是现在流行的代码托管平台,今天以eclipse为例讲解github的使用,新建项目,提交eclipse项目到github,新建分支,合并分支 1.github上新建项目 记下githug项 ...
- intel dpdk api interrupt module 中断模块介绍
声明:此文档只做学习交流使用,请勿用作其他商业用途 author:朝阳_tonyE-mail : linzhaolover@gmail.comCreate Date: 2013-7-12 11:46: ...
- linux命令学习笔记(60):scp命令
scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行 拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速度.当你服务 ...
- NodeJS中 Path 模块
var path = require('path'); // 当发现有多个连续的斜杠时,会替换成一个: 当路径末尾包含斜杠时,会保留: // 在 Windows 系统会使用反斜杠. var p = p ...