Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Hive Join详解

Hive Join详解

作者头像
幽鸿
发布于 2020-04-02 10:51:07
发布于 2020-04-02 10:51:07
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

最近对hive的join用的比较多,特地归纳下常用的各种连接,看看hive的连接和我们普通的是否有不同。创建ta.txt和tb.txt两个文件,加载数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hive (cfpd_ods_safe)> load data local inpath 
      '/data/bdp/bdp_etl_deploy/hduser06/jaysonding/ta.txt' into table ta;
hive (cfpd_ods_safe)> load data local inpath 
      '/data/bdp/bdp_etl_deploy/hduser06/jaysonding/tb.txt' into table tb;

          查询数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hive (cfpd_ods_safe)> select * from ta;
OK
ta.uid
1111
2222
3333
4444
Time taken: 0.087 seconds, Fetched: 4 row(s)
hive (cfpd_ods_safe)> select * from tb;
OK
tb.uid
1111
2222
5555
Time taken: 0.183 seconds, Fetched: 3 row(s)

            现在尝试来连接了。

(1)普通的,连接:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ta.uid  tb.uid
1111    1111
1111    2222
1111    5555
2222    1111
2222    2222
2222    5555
3333    1111
3333    2222
3333    5555
4444    1111
4444    2222
4444    5555
Time taken: 21.328 seconds, Fetched: 12 row(s)

           可见普通逗号,不带条件结果就是一个笛卡尔积。再看带条件的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hive (cfpd_ods_safe)> select * from ta,tb where ta.uid=tb.uid;
ta.uid  tb.uid
1111    1111
2222    2222
Time taken: 23.147 seconds, Fetched: 2 row(s)

(2)内连接 inner join:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hive (cfpd_ods_safe)> select * from ta inner join tb on ta.uid=tb.uid;
ta.uid  tb.uid
1111    1111
2222    2222
Time taken: 21.597 seconds, Fetched: 2 row(s)

         可见inner join和直接逗号连接效果是一样的。

(3)左连接left join:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hive (cfpd_ods_safe)> select * from ta left join tb on ta.uid=tb.uid;
ta.uid  tb.uid
1111    1111
2222    2222
3333    NULL
4444    NULL
Time taken: 22.921 seconds, Fetched: 4 row(s)

(5)左外连接 left outer join:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hive (cfpd_ods_safe)> select * from ta left outer join tb on ta.uid=tb.uid;
ta.uid  tb.uid
1111    1111
2222    2222
3333    NULL
4444    NULL
Time taken: 22.637 seconds, Fetched: 4 row(s)

(6)全连接 full join:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hive (cfpd_ods_safe)> select * from ta full join tb on ta.uid=tb.uid;
ta.uid  tb.uid
1111    1111
2222    2222
3333    NULL
4444    NULL
NULL    5555
Time taken: 19.39 seconds, Fetched: 5 row(s)

(7)全外连接 full outer join:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hive (cfpd_ods_safe)> select * from ta full outer join tb on ta.uid=tb.uid;
ta.uid  tb.uid
1111    1111
2222    2222
3333    NULL
4444    NULL
NULL    5555
Time taken: 20.414 seconds, Fetched: 5 row(s)

结论:

(1)inner join效果和逗号连接一样,逗号其实是inner join的简写。

(2)不带条件的所有连接都是笛卡尔积

(3)left join和left outer join是一样的,full join和full outer join是一样的。right一样。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
一脸懵逼学习Hive的使用以及常用语法(Hive语法即Hql语法)
该文介绍了关于数据库连接池的知识点,包括概念、特点、配置方式、调优参数和常见问题。同时,文章还提供了如何正确配置和优化数据库连接池的相关建议,以帮助开发人员更好地掌握和应用该技术。
别先生
2018/01/02
3.7K0
一脸懵逼学习Hive的使用以及常用语法(Hive语法即Hql语法)
hive学习笔记之六:HiveQL基础
结果如下,可见不会根据student表的addressid字段值去address查找记录,而是将addrerss的记录全部连接一次:
程序员欣宸
2021/07/06
3430
hive学习笔记之六:HiveQL基础
[Hadoop大数据]——Hive连接JOIN用例详解
SQL里面通常都会用Join来连接两个表,做复杂的关联查询。比如用户表和订单表,能通过join得到某个用户购买的产品;或者某个产品被购买的人群.... Hive也支持这样的操作,而且由于Hive底层运行在hadoop上,因此有很多地方可以进行优化。比如小表到大表的连接操作、小表进行缓存、大表进行避免缓存等等... 下面就来看看hive里面的连接操作吧!其实跟SQL还是差不多的... 数据准备:创建数据-->创建表-->导入数据 首先创建两个原始数据的文件,这两个文件分别有三列,第一列是id、第二列是名
用户1154259
2018/01/17
1.5K0
Hive的JOIN连接
INNER JOIN内连接:只有进行连接的两个表中都存在与连接条件相匹配的数据才会被保留下来。
顾翔
2024/09/10
1800
Hive的JOIN连接
Hive常用函数的使用
文章作者:foochane </br> 原文链接:https://foochane.cn/article/2019062501.html
foochane
2019/07/01
1.4K0
Hive 中的复合数据结构简介以及一些函数的用法说明
目前 hive 支持的复合数据类型有以下几种: map (key1, value1, key2, value2, ...) Creates a map with the given key/value pairs struct   (val1, val2, val3, ...) Creates a struct with the given field values. Struct field names will be col1, col2, ... named_struct   (name1,
用户1177713
2018/02/24
4.1K0
Hive 中的复合数据结构简介以及一些函数的用法说明
快速学习-Hive企业级调优
Fetch 抓取是指,Hive 中对某些情况的查询可以不必使用 MapReduce 计算。例如:SELECT * FROM employees;在这种情况下,Hive 可以简单地读取 employee 对应的存储目录下的文件,然后输出查询结果到控制台。 在 hive-default.xml.template 文件中 hive.fetch.task.conversion 默认是 more,老版本 hive默认是 minimal,该属性修改为 more 以后,在全局查找、字段查找、limit 查找等都不走mapreduce。
cwl_java
2020/02/21
1K0
快速学习-Hive企业级调优
Hive快速入门系列(15) | Hive性能调优 [二] 表的优化
  将key相对分散,并且数据量小的表放在join的左边,这样可以有效减少内存溢出错误发生的几率;再进一步,可以使用map join让小的维度表(1000条以下的记录条数)先进内存。在map端完成reduce。 实际测试发现:新版的hive已经对小表JOIN大表和大表JOIN小表进行了优化。小表放在左边和右边已经没有明显区别。
不温卜火
2020/10/28
1.3K0
Hive快速入门系列(15) | Hive性能调优 [二] 表的优化
Hive-1.2.1_04_DML操作 5.1. Join8.1. 使用案例8.2. Transform实现
当我们做Load操作是,hive不会做任何数据转换,只是纯复制/移动操作,将数据文件移动到与Hive表对应的位置。
踏歌行
2020/10/15
4610
spark三种连接join
本文主要介绍spark join相关操作。 讲述spark连接相关的三个方法join,left-outer-join,right-outer-join,在这之前,我们用hiveSQL先跑出了结果以方便进行对比。 我们以实例来进行说明。我的实现步骤记录如下。 1、数据准备 2、HSQL描述 3、Spark描述 1、数据准备 我们准备两张Hive表,分别是orders(订单表)和drivers(司机表),通过driver_id字段进行关联。数据如下: orders orders表有两个字段,订单id:order
用户1225216
2018/03/05
1.5K0
hive学习笔记之二:复杂数据类型
执行结果如下,第一条记录friends数组中有tom_friend_0,显示为true,第二条记录不包含,就显示false:
程序员欣宸
2021/06/28
5360
Hive的调优你都知道那些?
我们在工作中还是在学习中有都会遇到我们写的HQL语句执行效率不高,那我们该怎么提高查询效率那,这篇文章就带你从不同维度讲解,让你的HQL瞬间提高一个档次。记得收藏
大数据老哥
2021/02/04
1K0
Hive的调优你都知道那些?
Hive的left join、left outer join和left semi join三者的区别
Hive的Join的文档说明地址: https://cwiki.apache.org/confluence/display/Hive/LanguageManual%2BJoins 以下为两个测试数据表建表语句: MySQL use test; DROP TABLE IF EXISTS table1; create table table1( student_no bigint comment '学号', student_name string comment '姓名' ) COMMENT 'test 学生信
学到老
2018/03/19
3K0
Hive学习-数据定义语句
1)存储位置:Hive的数据存储在Hadoop上,而像MySQL这样的关系型数据库将数据存储在设备或本地系统中。
顾翔
2024/09/10
4880
Hive学习-数据定义语句
hive具体操作
Hive对hadoop集群及数据库操作说明文档 1 创建表 hive> create table userinfo(id int, name string) row format delimited fields terminated by '\t'; hive> create table choice(userid int, classname string) row format delimited fields terminated by '\t'; hive> create table classi
闵开慧
2018/03/30
6990
Hive查询的18种方式,你都学会了吗?
大家一定对Hive不陌生吧!Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能(HQL)。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。因此,hive十分适合对数据仓库进行统计分析。
大数据梦想家
2021/01/27
1.9K0
Hive查询的18种方式,你都学会了吗?
(四)Hive分区、分桶
CREATE TABLE IF NOT EXISTS salgrade2 ( GRADE int, LOSAL int, HISAL int ) partitioned by (day string) row format delimited fields terminated by '\t' location '/data/inner/ODS/01/salgrade2';
wolf
2020/09/18
1.2K0
(超长文)Hive Sql基本操作
2.注释问题2.1 MySQL中的注释2.2 Hive中的注释3.乱码问题3.1 修改表字段注解和表注解3.2 修改分区字段注解3.3 修改索引注解3.4 修改metastore的连接URL4.数据库基本操作4.1 创建带属性的库4.2 显示数据库详情:4.3 查看正在使用哪个库4.4 查看数据库的详情语句5.删除数据库5.1 删除库原则5.2 删除不含表的数据库5.3 删除含表数据库6.切换库及创建表6.1 切换库6.2 创建表7.表详情及表操作7.1 表详情7.2 表操作8.分区8.1 查看分区8.2 添加分区8.3 修改分区8.4 删除分区
公众号guangcity
2019/09/20
3.8K0
(超长文)Hive Sql基本操作
Hive 基础(2):库、表、字段、交互式查询的基本操作
1、命令行操作 (1)打印查询头,需要显示设置: set hive.cli.print.header=true; (2)加"--",其后的都被认为是注释,但 CLI 不解析注释。带有注释的文件只能通过这种方式执行: hive -f script_name (3)-e后跟带引号的hive指令或者查询,-S去掉多余的输出: hive -S -e "select * FROM mytable LIMIT 3" > /tmp/myquery (4)遍历所有分区的查询将产生一个巨大的MapRe
用户1177713
2018/02/24
3.7K0
Hive-1.2.1_05_案例操作
1. 建库建表 1 # 建库 2 create database exercise; 3 # 建表 4 create table student(Sno int,Sname string,Sex string,Sage int,Sdept string) 5 row format delimited fields terminated by ','; 6 7 create table course(Cno int,Cname string) 8 row format delimite
踏歌行
2020/10/15
4660
相关推荐
一脸懵逼学习Hive的使用以及常用语法(Hive语法即Hql语法)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验