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的使用的更多相关文章

  1. Hive JOIN使用详解

    转自http://shiyanjun.cn/archives/588.html Hive是基于Hadoop平台的,它提供了类似SQL一样的查询语言HQL.有了Hive,如果使用过SQL语言,并且不理解 ...

  2. Hive Join

    最近被朋友问到有关于Hive Join的问题,保守回答过后,来补充补充知识: Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能. 一.Hi ...

  3. Hive JOIN的基本操作 及 内部实现

    1.HIVE基本操作: [一起学Hive]之十一-Hive中Join的类型和用法 注:HIve不支持非等值连接: 什么是等值连接: //Oracle SQL 不等值连接 //通过不等值连接查找7788 ...

  4. Hive Join优化

    在阐述Hive Join具体的优化方法之前,首先看一下Hive Join的几个重要特点,在实际使用时也可以利用下列特点做相应优化: 1. 只支持等值连接 2. 底层会将写的HQL语句转换为MapRed ...

  5. hive join 优化

    common join : 即reducer join,瓶颈在shuffle阶段,会产生较大的网络io: map join:即把小表放前面,扫描后放入每个节点的内存,在map阶段进行匹配: 开启map ...

  6. hive: join 遇到问题

    在表连接时遇到一个问题: insert overwrite table BF_EVT_CRD_CRT_TRAD2 select BF_EVT_CRD_CRT_TRAD.*, jjkdjk.CUST_N ...

  7. 转载:几种 hive join 类型简介

    作为数据分析中经常进行的join 操作,传统DBMS 数据库已经将各种算法优化到了极致,而对于hadoop 使用的mapreduce 所进行的join 操作,去年开始也是有各种不同的算法论文出现,讨论 ...

  8. hive join的三种优化方式

    原网址:https://blog.csdn.net/liyaohhh/article/details/50697519 hive在实际的应用过程中,大部份分情况都会涉及到不同的表格的连接, 例如在进行 ...

  9. hive join 优化 --小表join大表

    1.小.大表 join 在小表和大表进行join时,将小表放在前边,效率会高.hive会将小表进行缓存. 2.mapjoin 使用mapjoin将小表放入内存,在map端和大表逐一匹配.从而省去red ...

随机推荐

  1. Bayer滤镜转换颜色方案

    Bayer滤镜如何转换颜色? Bayer模式是颜色模式,被广泛应用于CCD和CMOS摄像头.相机使用了拜耳滤镜,分别过滤得到红绿蓝三种颜色.既然要得到的是红绿蓝频段光线的强度,要通过的就是红绿蓝光,就 ...

  2. C# & JS 判断字符串是否为日期格式

    在C#中,对格式的判断有一类专门函数,那就是TryParse.TryParse在各个不同的类型类(如int,string,DateTime)中,都是存在的.在TryParse中一般有两个参数,一个是待 ...

  3. httprunner中的分层(api、testcase、testsuite)及实际使用

    一.分层思想 api定义层:最底下的一层是api的定义层testcase层:测试用例层,调用定义层的内容testsuite:测试套件层 二.分层案例设计实现实践举例 1.api 层: 2.testca ...

  4. 【转】【NX二次开发】UFUN进度中断,单击停止可中断此操作

    队长的博客: https://www.cnblogs.com/nxopen2018/p/13174207.html 显示此对话框,点击可中断操作: 用到的ufun函数: UF_ABORT_ask_fl ...

  5. Linux系统命令login的翻译

    LOGIN(1)                                用户命令                               LOGIN(1)名称       login - ...

  6. css--常见左右盒子高度自适应布局

    前言 前端开发工程师最基础的技能要求是根据 ui 设计稿还原网页,这就缺少不了必要的网页布局,首先看下最近小伙伴问我的一个问题,他说一个网页有左右两个部分,左右两个部分的高度都不固定,要使得右部分的宽 ...

  7. VScode如何设置模板字符串html标签自动补全

    在学习Vue的过程中,很多时候都需要用到模板字符串,但是里面的html标签一个字符一个字符的去敲未免也太麻烦了吧,其实我们可以通过设置来实现在模板字符串中按Tab键快速补全html标签. 1.在VSC ...

  8. Unity3D-UI--Layout组件

    Layout组件 自动排版 Layout Group Vertical Layout Group 垂直布局 [垂直布局组]组件将其子布局元素彼此重叠.它们的高度由各自的最小高度,首选高度和柔性高度决定 ...

  9. 一个SDK给我干懵逼了?大厂的SDK就这?

    活久见 .org.jboss.netty 和 io.netty 你分的清吗? 大家好,我是小猿来也,一个热衷写 bug 的程序猿. 一天我正在专心致志写 Bug 的时候,一个同事跑过来找我. 说有个很 ...

  10. 13、解决java -version命令报错

    13.1.问题描述: 安装jdk后在dos界面中输入"java -version"回车的时候报如下错误: Error opening registry key'software\J ...