Hive——join的使用
Hive——join的使用
hive中常用的join有:inner join、left join 、right join 、full join、left semi join、cross join、mulitiple
在hive中建立两张表,用于测试:
hive> select * from rdb_a;
OK
1 lucy
2 jack
3 tony hive> select * from rdb_b;
OK
1 12
2 22
4 32
一、基本join使用
1、内关联([inner] join):只返回关联上的结果
select a.id,a.name,b.age from rdb_a a inner join rdb_b b on a.id=b.id; Total MapReduce CPU Time Spent: 2 seconds 560 msec
OK
1 lucy 12
2 jack 22
Time taken: 47.419 seconds, Fetched: 2 row(s)
2、左关联(left [outer] join):以左表为主
select a.id,a.name,b.age from rdb_a a left join rdb_b b on a.id=b.id; Total MapReduce CPU Time Spent: 1 seconds 240 msec
OK
1 lucy 12
2 jack 22
3 tony NULL
Time taken: 33.42 seconds, Fetched: 3 row(s)
3、右关联(right [outer] join):以右表为主
select a.id,a.name,b.age from rdb_a a right join rdb_b b on a.id=b.id; Total MapReduce CPU Time Spent: 2 seconds 130 msec
OK
1 lucy 12
2 jack 22
NULL NULL 32
Time taken: 32.7 seconds, Fetched: 3 row(s)
4、全关联(full [outer] join):以两个表的记录为基准,返回两个表的记录去重之和,关联不上的字段为NULL。
select a.id,a.name,b.age from rdb_a a full join rdb_b b on a.id=b.id; Total MapReduce CPU Time Spent: 5 seconds 540 msec
OK
1 lucy 12
2 jack 22
3 tony NULL
NULL NULL 32
Time taken: 42.938 seconds, Fetched: 4 row(s)
5、left semi join:以LEFT SEMI JOIN关键字前面的表为主表,返回主表的KEY也在副表中的记录。
select a.id,a.name from rdb_a a left semi join rdb_b b on a.id=b.id; Total MapReduce CPU Time Spent: 3 seconds 300 msec
OK
1 lucy
2 jack
Time taken: 31.105 seconds, Fetched: 2 row(s) 其实就相当于:select a.id,a.name from rdb_a a where a.id in(select b.id from rdb_b b );
6、笛卡尔积关联(cross join):返回两个表的笛卡尔积结果,不需要指定关联键
select a.id,a.name,b.age from rdb_a a cross join rdb_b b; Total MapReduce CPU Time Spent: 1 seconds 260 msec
OK
1 lucy 12
1 lucy 22
1 lucy 32
2 jack 12
2 jack 22
2 jack 32
3 tony 12
3 tony 22
3 tony 32
Time taken: 24.727 seconds, Fetched: 9 row(s)
二、Common Join与Map Join
利用hive进行join连接操作,相较于MR有两种执行方案,一种为common join,另一种为map join ,map join是相对于common join的一种优化,省去shullfe和reduce的过程,大大的降低的作业运行的时间。
Common Join(也称之为shufflejoiin/reducejoin)

过程:
1>首先会启动一个Task,Mapper会去读表HDFS上两张X/Y表中的数据
2>Mapper处理过数据再经过shuffle处理
3>最后由reduce输出join结果
缺点 :
1>存在shuffle过程,效率低
2>每张表都要去磁盘读取,磁盘IO大
Map Join

过程:
1>mapjoin首先会通过本地MapReduce Task将要join的小表转成Hash Table Files,然后加载到分布式缓存中
2>Mapperh会去缓存中读取小表数据来和Big Table数据进行join
3>Map直接给出结果
优点: 没有shuffle/Reduce过程,效率提高
缺点 :由于小表都加载到内存当中,读内存的要求提高了
hive中专门有个参数来设置是否自动将commmon join 转化为map join:hive.auto.convert.join。
当hive.auto.convert.join=true hive会为我们自动转换。
Hive——join的使用的更多相关文章
- Hive JOIN使用详解
转自http://shiyanjun.cn/archives/588.html Hive是基于Hadoop平台的,它提供了类似SQL一样的查询语言HQL.有了Hive,如果使用过SQL语言,并且不理解 ...
- Hive Join
最近被朋友问到有关于Hive Join的问题,保守回答过后,来补充补充知识: Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能. 一.Hi ...
- Hive JOIN的基本操作 及 内部实现
1.HIVE基本操作: [一起学Hive]之十一-Hive中Join的类型和用法 注:HIve不支持非等值连接: 什么是等值连接: //Oracle SQL 不等值连接 //通过不等值连接查找7788 ...
- Hive Join优化
在阐述Hive Join具体的优化方法之前,首先看一下Hive Join的几个重要特点,在实际使用时也可以利用下列特点做相应优化: 1. 只支持等值连接 2. 底层会将写的HQL语句转换为MapRed ...
- hive join 优化
common join : 即reducer join,瓶颈在shuffle阶段,会产生较大的网络io: map join:即把小表放前面,扫描后放入每个节点的内存,在map阶段进行匹配: 开启map ...
- hive: join 遇到问题
在表连接时遇到一个问题: insert overwrite table BF_EVT_CRD_CRT_TRAD2 select BF_EVT_CRD_CRT_TRAD.*, jjkdjk.CUST_N ...
- 转载:几种 hive join 类型简介
作为数据分析中经常进行的join 操作,传统DBMS 数据库已经将各种算法优化到了极致,而对于hadoop 使用的mapreduce 所进行的join 操作,去年开始也是有各种不同的算法论文出现,讨论 ...
- hive join的三种优化方式
原网址:https://blog.csdn.net/liyaohhh/article/details/50697519 hive在实际的应用过程中,大部份分情况都会涉及到不同的表格的连接, 例如在进行 ...
- hive join 优化 --小表join大表
1.小.大表 join 在小表和大表进行join时,将小表放在前边,效率会高.hive会将小表进行缓存. 2.mapjoin 使用mapjoin将小表放入内存,在map端和大表逐一匹配.从而省去red ...
随机推荐
- Python API vs C++ API of TensorRT
Python API vs C++ API of TensorRT 本质上,C++ API和Python API应该在支持您的需求方面接近相同.pythonapi的主要优点是数据预处理和后处理都很容易 ...
- mybatis学习——实现分页
首先回顾一下分页的sql语句: SELEC * FROM 表名 LIMIT startIndex,pageSize tips: *startIndex:起始的位置(从哪个元素开始分页) *pageSi ...
- Netty 框架学习 —— ChannelHandler 与 ChannelPipeline
ChannelHandler 1. Channel 生命周期 Channel 的生命周期状态如下: 状态 描述 ChannelUnregistered Channel 已经被创建,但还未注册到 Eve ...
- 基于Typescript的Vue项目配置国际化
基于Typescript的Vue项目配置国际化 简介 使用vue-i18n插件对基于Typescript的vue项目配置国际化,切换多种语言, 配合element-ui或者其他UI库 本文以配置中英文 ...
- Nginx 配置文件介绍
目录 1.1 常用命令 1.2 Nginx的配置文件结构 1.3 Nginx的全局配置 1.4 HTTP服务器配置 1.5 HttpGzip配置 1.6 负载均衡配置 1.7 server虚拟主机配置 ...
- Android客户端网络预连接优化机制探究
一.背景 一般情况下,我们都是用一些封装好的网络框架去请求网络,对底层实现不甚关注,而大部分情况下也不需要特别关注处理.得益于因特网的协议,网络分层,我们可以只在应用层去处理业务就行.但是了解底层的一 ...
- Waymo object detect 2D解决方案论文拓展
FixMatch 半监督中的基础论文,自监督和模型一致性的代表作. Consistency regularization: 无监督学习的方式,数据\(A\)和经过数据增强的\(A\)计做\(A'\) ...
- 6.11考试总结(NOIP模拟7)
背景 时间分配与得分成反比,T1 20min 73pts,T2 1h 30pts,T3 2h 15pts(没有更新tot值,本来应该是40pts的,算是本次考试中最遗憾的地方了吧),改起来就是T3比较 ...
- 【Javascript + Vue】实现随机生成迷宫图片
前言 成品预览:https://codesandbox.io/s/maze-vite-15-i7oik?file=/src/maze.js 不久前写了一篇文章介绍了如何解迷宫:https://www. ...
- 实现SLIC算法生成像素画
前言 像素风最早出现在8bit的电子游戏中,受制于电脑内存大小以及显示色彩单一, 只能使用少量像素来呈现内容,却成就了不少经典的像素游戏.随着内存容量与屏幕分辨率的提升,内存与显示媒介的限制不再是问题 ...