【Hive】各种join连接用法

news/2024/5/2 15:02:55/文章来源:https://blog.csdn.net/hyj_king/article/details/126656349

目录

一、简介

二、创建数据

1、数据概览

2、创建hive表并插入数据

三、join连接测试

1、join(inner join)

2、left join(left outer join)

3、right join(right outer join)

4、full join(full outer join)

5、left semi join

6、map side join

四、join 和 left semi join 的区别


一、简介

        hive join 主要包括join(内连接)、left join(左连接)、right join(右连接)、full join(全连接)、left semi join(左半连接)、map side join(map端连接)六种用法,其中inner join 和 join等价,left outer join 和 left join等价,right outer join 和 right join 等价,full outer join 和 full join等价。 正确选择合适的join 类型在开发过程中可以提升效率。

二、创建数据

1、数据概览

2、创建hive表并插入数据

create table people(name string,age int) row format delimited fields terminated by ',';
insert into people(name,age) values('Lucy',29);
insert into people(name,age) values('Tom',26);
insert into people(name,age) values('Lina',22);
insert into people(name,age) values('Lili',18);
insert into people(name,age) values('Jack',26);
insert into people(name,age) values('Lihua',23);create table info(name string,address string) row format delimited fields terminated by ',';
insert into info(name,address) values('Lucy','郑州');
insert into info(name,address) values('Lili','北京');
insert into info(name,address) values('Jack','上海');
insert into info(name,address) values('Alice','南京');
insert into info(name,address) values('Clarke','广州');
insert into info(name,address) values('Lonnie','三亚');

三、join连接测试

1、join(inner join)

这里join 和 inner join等价;

select t1.name,t1.age,t2.address from people t1 join info t2 on t1.name=t2.name;Lucy	29	郑州
Lili	18	北京
Jack	26	上海
select t1.name,t1.age,t2.address from people t1 inner join info t2 on t1.name=t2.name;Lucy	29	郑州
Lili	18	北京
Jack	26	上海

2、left join(left outer join)

这里left join 和 left outer join 等价;

select t1.name,t1.age,t2.address from people t1 left join info t2 on t1.name=t2.name;Lucy	29	郑州
Lili	18	北京
Jack	26	上海
Tom	    26	NULL
Lihua	23	NULL
Lina	22	NULL
select t1.name,t1.age,t2.address from people t1 left outer join info t2 on t1.name=t2.name;Lucy	29	郑州
Lili	18	北京
Jack	26	上海
Tom	    26	NULL
Lihua	23	NULL
Lina	22	NULL

3、right join(right outer join)

这里right join 和 right outer join 等价;

select t1.name,t1.age,t2.address from people t1 right join info t2 on t1.name=t2.name;Lucy	29	    郑州
NULL	NULL	南京
NULL	NULL	广州
Lili	18	    北京
NULL	NULL	三亚
Jack	26	    上海
select t1.name,t1.age,t2.address from people t1 right outer join info t2 on t1.name=t2.name;Lucy	29	    郑州
NULL	NULL	南京
NULL	NULL	广州
Lili	18	    北京
NULL	NULL	三亚
Jack	26	    上海

4、full join(full outer join)

这里full join 和 full outer join 等价;

select t1.name,t1.age,t2.name,t2.address from people t1 full join info t2 on t1.name=t2.name;NULL	NULL	Alice	南京
NULL	NULL	Clarke	广州
Jack	26	    Jack	上海
Lihua	23	    NULL	NULL
Lili	18	    Lili	北京
Lina	22	    NULL	NULL
NULL	NULL	Lonnie	三亚
Lucy	29	    Lucy	郑州
Tom	    26	    NULL	NULL
select t1.name,t1.age,t2.name,t2.address from people t1 full outer join info t2 on t1.name=t2.name;NULL	NULL	Alice	南京
NULL	NULL	Clarke	广州
Jack	26	    Jack	上海
Lihua	23	    NULL	NULL
Lili	18	    Lili	北京
Lina	22	    NULL	NULL
NULL	NULL	Lonnie	三亚
Lucy	29	    Lucy	郑州
Tom	    26	    NULL	NULL

5、left semi join

  • left semi join是一个限制语句,join 右边表的字段不能出现在select或者where中。
  • left semi join是IN/EXISTS子查询的一种更高效的实现。
  • left semi join是in(keySet)的关系,遇到右表重复记录,左表会跳过,而 join 则会一直遍历。这就导致右表有重复值得情况下left semi join只产生一条,join会产生多条,所以left semi join的性能更高。 
等价语句:
select t1.name,t1.age from people t1 left semi join info t2 on t1.name=t2.name;
<==>
select t1.name,t1.age from people t1 where t1.name in(select t2.name from info t2);
<==>
select t1.name,t1.age from people t1 where exists(select t2.name from info t2 where t1.name=t2.name);Lucy	29
Lili	18
Jack	26
错误示范【select后面出现join右边表的字段】:
hive> select t1.name,t1.age,t2.name,t2.address from people t1 
left semi join info t2 on t1.name=t2.name;
FAILED: SemanticException [Error 10004]: Line 1:22 Invalid table alias or 
column reference 't2': (possible column names are: name, age)

6、map side join

  • map side join使用场景是一个大表和一个小表的连接操作,其中,“小表”是指文件足够小,可以加载到内存中。该算法可以将join算子执行在Map端,无需经历shuffle和reduce等阶段,因此效率非常高。
  • map side join 需要hive更改配置文件,hive2.11版本默认是开着的:
hive> set hive.auto.convert.join;
hive.auto.convert.join=true
hive> set hive.mapjoin.smalltable.filesize;
hive.mapjoin.smalltable.filesize=25000000

四、join 和 left semi join 的区别

注意: left semi join是in(keySet)的关系,遇到右表重复记录,左表会跳过,而 join 则会一直遍历。这就导致右表有重复值得情况下left semi join只产生一条,join会产生多条,所以left semi join的性能更高。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_4891.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

定时任务cron

原文链接 1 格式 {秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)} 2 用法 "30 * * * * ? " 每半分钟触发任务"30 10 * * * ? " 每小时的10分30秒触发任务"30 10 1 * * ? " 每天1点10分30秒触发任务"30 10 1 20 * ? &quo…

【UCIe】UCIe D2D Adapter 介绍

&#x1f525;点击查看精选 UCIe 系列文章&#x1f525; &#x1f525;点击进入【芯片设计验证】社区&#xff0c;查看更多精彩内容&#x1f525; &#x1f4e2; 声明&#xff1a; &#x1f96d; 作者主页&#xff1a;【MangoPapa的CSDN主页】。⚠️ 本文首发于CSDN&#xff0…

springboot大学生兼职网站毕业设计源码311734

springboot大学生兼职网站 摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对大学生兼职网站等…

React + Dva + Antd + Umi 快速入门

最近一个项目用了React + Dva + Antd + Umi 技术栈基础框架概念 React前端三大框架之一。Dva由阿里架构师 sorrycc 带领 team 完成的一套前端框架,在作者的 github 里是这么描述它的:”dva 是 react 和 redux 的最佳实践”。Antd是阿里的一套开箱即用的中台前端/设计解决方案…

Vue模板语法上集(02)

今日份分享内容&#xff1a; 一、插值&#xff08;该代码块会放在末尾一并展示&#xff09; 1、文本插值 2、使用v-html指令用于输出html代码 3、属性 HTML属性中的值应使用v-bind指令 4、表达式 5、class 样式绑定 二、指令 1、 v-if 2、 v-show 3、v-for&…

Docker高级-1.复杂安装示例(mysql主从复制、redis集群)

目录 一、mysql主从复制 1.1 主服务器 1.2 从服务器 二、redis集群 2.1 问题引入-1~2亿条数据需要缓存&#xff0c;如何设计这个存储案例 2.1.1 方案一-哈希取余分区 2.1.2 方案二-一致性哈希算法分区 2.1.3 方案三-哈希槽分区 2.2 redis集群搭建演示 2.3 数据读写测试…

mybatis-plus-generator 配置不生成 entity, controller, mapper 等

3.5.2版本 有需求不生成controller 于是baidu 发现如下方法.templateConfig(builder -> builder.controller(""))配置后确实不生成controller又有需求不生成entity 尝试以下代码未果.templateConfig(builder -> builder.entity(""))于是查看源代码和…

【编程题】【Scratch二级】2022.06 画正方形

画正方形 在舞台正中央绘制一个边长为200的正方形。 1. 准备工作 &#xff08;1&#xff09;保留默认小猫角色并隐藏角色&#xff1b; &#xff08;2&#xff09;默认空白背景&#xff1b; &#xff08;3&#xff09;添加画笔模块。 2. 功能实现 &#xff08;1&#xff…

K8s(kubernetes)介绍以及原理解析

K8s&#xff08;kubernetes&#xff09; 云原生 服务部署模式 物理机模式–>虚拟化模式–>云端模式&#xff08;云原生模式&#xff09; K8s简介及架构 容器编排技术&#xff0c;用来管理容器 但是不直接管理容器&#xff0c;通过管理pod来间接管理容器 pod是k8s最小…

Android的handler消息收发处理——子线程与主线程(UI线程)间的通信

目录 写在前面 基础概念 什么是handler&#xff1f; 什么是looper&#xff1f; 什么是消息队列&#xff08;MessageQueue&#xff09;&#xff1f; 在子线程中使用子线程中的数据更新UI线程 主线程与子线程通信实例&#xff08;程序代码&#xff09; 子线程获取主线程h…

01.Singleton单件(单例)

一&#xff1a;动机&#xff08;Motivation&#xff09; <1>在软件系统中&#xff0c;经常有这样一些特殊的类&#xff0c;必须保证它们在系统中只存在一个实例&#xff0c;才能确保它们的逻辑正确性、以及良好的效率。 <2>如何绕过常规的构造器&#xff0c;提供一…

堆技巧 数组反向越界泄露地址

四川省2021信息安全技术大赛 classroom 痛苦痛苦痛苦&#xff0c;调了半天才找到数组起始地址&#xff0c;还是自己太菜了&#xff0c;好好记录一下这题 题目给了libc&#xff0c;2.31的题 嗯&#xff0c;可以考虑覆盖got表或者hook函数 打开ida发现是c的题&#xff0c;认真…

目前期货开户手续费比较透明

一、期货公司手续费 只要交易买卖期货就会产生期货手续费&#xff0c;不同的期货交易所&#xff0c;商品期货手续费收取标准不一样&#xff0c;首先&#xff0c;我们需要弄清楚期货手续费的组成和分类&#xff1a; 期货实际收取的手续费期货交易所手续费期货公司额外加收的佣…

flask-sqlalchemy连接数据库

1、安装flask_sqlalchemy和pymysql包 pip install flask-sqlalchemy pip install pymysql 2、进行配置 使用Flask-SQLAlchemy扩展操作数据库&#xff0c;首先需要通过URL建立数据库连接&#xff0c;必须保存到Flask配置对象的SQLALCHEMY_DATABASE_URI中。 HOSTNAME 127.0…

MySQL入门:数据库是什么 | SQL是什么 | MySQL是什么

文章目录数据库数据库管理系统&#xff08;DBMS&#xff09;的种类数据库的结构什么是SQLMySQLSQL语句 | 种类SQL 的基本书写规则存储引擎参考与总结全文约 3235 字&#xff0c;预计阅读时长&#xff1a; 9分钟数据库 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库?…

dubbo和springCloud

Dubbo 高性能的java RPC框架 架构 init:初始化 async:异步 sync同步 0:需要容器启动例如Tomcat 1:注册ip端口以及一些东西到注册中心 2:订阅服务快速入门 Zookeeper(官方推荐注册中心,同时还有Redis,Simper,Multicast,Nacos等) 安装:默认端口2181 Dubbo快速入门 传统方法,需要…

C/C++后端开发学习路线总结(附带实习学习经历分享)

大家好哇&#xff0c;九月份了&#xff1b;不知道大家的工作或者实习都安排的怎么样了&#xff1f;反正狮作为一个过来人只能在各种论坛上面看到都是哀鸿遍野&#xff1b;暗自惊心感慨现在年轻人不好混啊~ 然后呢&#xff0c;狮最近后台收到不少C/C后端怎么学的邀请回答&#…

广西大学口袋开发板之抢答器

任务要求&#xff1a; 四名选手各有一个抢答按键&#xff0c;按键的编号以及指示灯&#xff08;手柄板上的LED模块&#xff09;的编号与选手的编号相对应&#xff0c;抢答器具有编号的识别和数据的锁存、显示以及提示音功能。 评分细则&#xff1a; 裁判按下开始键后&#x…

2022年0902Maven的继承和利用Idea创建Maven工程的内容<第五课>

目录 第一部分 Maven的继承 1 概念 2 作用 3 它的背景是&#xff1a; 4 它背后的需求是&#xff1a; 在每一个 module 中各自维护各自的依赖信息很容易发生出入&#xff0c;不易统一管理。 使用同一个框架内的不同 jar 包&#xff0c;它们应该是同一个版本&#xff0c;所…

电脑无线5g网卡发现不了网件R7000的Wifi 5g网络

原因是因为 网件R7000的5g网络默认是100的频道&#xff0c; 把频道固定的153然后把路由器离拖线板和其他设备远一点