当前位置: 首页 > news >正文

Hive中各种Join的实现

一. 数据准备
1. 创建两张表
create table tablea (id int, name string) row format delimited fields terminated by ',';
create table tableb (id int, age int) row format delimited fields terminated by ',';
2. 准备两份数据

tablea.txt文件数据如下:

1,huangbo
2,xuzheng
4,wangbaoqiang
6,huangxiaoming
7,fengjie
10,liudehua

tableb.txt 文件数据如下:

2,20
4,50
7,80
10,22
12,33
15,44
3. 将数据导入对应的表中
load data local inpath '/root/tablea.txt' into table tablea;
load data local inpath '/root/tableb.txt' into table tableb;
二. JOIN实现
1. inner join(内连接)

inner join 就是取两表的交集

select * from tablea a inner join tableb b on a.id = b.id;

结果:

2       xuzheng 2       20
4       wangbaoqiang    4       50
7       fengjie 7       80
10      liudehua        10      22
2. left outer join (左外连接)

left outer join是以左表基准,右表不存在的key均赋值为null

select * from tablea a left join tableb b on a.id = b.id;

结果:

1       huangbo NULL    NULL
2       xuzheng 2       20
4       wangbaoqiang    4       50
6       huangxiaoming   NULL    NULL
7       fengjie 7       80
10      liudehua        10      22
3. right outer join(右外连接)

right outer join以右表基准,左表不存在的key均赋值为null

select * from tablea a right join tableb b on a.id = b.id;

结果:

2       xuzheng 2       20
4       wangbaoqiang    4       50
7       fengjie 7       80
10      liudehua        10      22
NULL    NULL    12      33
NULL    NULL    15      44
4. full outer join(全外连接)

full outer join 是对左右两表求并集,两个表中不存在的key均赋值null

select * from tablea a full outer join tableb b on a.id = b.id;

结果:

1       huangbo NULL    NULL
2       xuzheng 2       20
4       wangbaoqiang    4       50
6       huangxiaoming   NULL    NULL
7       fengjie 7       80
10      liudehua        10      22
NULL    NULL    12      33
NULL    NULL    15      44
5. left semi join(左半连接)

left semi join返回两个表交集中左表的部分,Hive低版本中没有实现标准SQL中exist, in,因此它最主要的使用场景就是替代exist与in。

需求:
找出tablea表在tableb表中同时存在的id的记录,这个需求用IN和EXISTS的实现语句如下:

-- IN
select * from tablea where id in (select id from tableb);
-- EXISTS
select * from tablea  where exists (select * from tableb where tablea.id = tableb.id);

运行结果:

2       xuzheng
4       wangbaoqiang
7       fengjie
10      liudehua

这个需求在Hive低版本中可以使用left semi join实现,同时可以获得更好的性能。

select * from tablea a left semi join tableb b on a.id = b.id;

运行结果:

2       xuzheng
4       wangbaoqiang
7       fengjie
10      liudehua

http://www.mrgr.cn/news/67828.html

相关文章:

  • 【Java数据结构】枚举
  • 遥测终端机RTU产品如何选型和配置
  • Pycharm,2024最新专业版下载安装配置详细教程!
  • layui 自定义验证单选框必填
  • Tomcat(1) 什么是Tomcat?
  • JAVA读取doc,docx转PDF通过vue展示
  • 【系统架构设计师】高分论文:论企业应用系统的分层架构风格
  • 数据结构之单链表(C语言)
  • linux基础知识
  • day-81 打家劫舍 II
  • 焊接覆层耐磨板行业全面且深入的分析
  • 【零基础学习CAPL】——XML工程创建与使用详解
  • uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)
  • Java题目笔记(十四)Date +综合练习
  • ruoyi-vue集成tianai-captcha验证码
  • 如何将现有VUE项目所有包更新到最新稳定版
  • C++之queue容器
  • 前端-计算机网络
  • 信息流不同行业账户流量池有区别吗?
  • 宠物空气净化器是养宠智商税吗?真实测评霍尼韦尔、希喂、米家
  • 【HarmonyOS】鸿蒙中Interface实例实现的书写格式
  • 从Apache Atlas到Aloudata BIG,数据血缘解析有何改变?
  • 为什么Uptime+Kuma本地部署与远程使用是网站监控新选择?
  • LeetCode 热题100 之 栈
  • 最新!2024年十大邮件群发软件年终盘点
  • 【工具分享】Agent.iih勒索病毒解密工具