`
superlxw1234
  • 浏览: 551457 次
  • 性别: Icon_minigender_1
  • 来自: 西安
博客专栏
Bd1c0a0c-379a-31a8-a3b1-e6401e2f1523
Hive入门
浏览量:44450
社区版块
存档分类
最新评论

[一起学Hive]之十一-Hive中Join的类型和用法

    博客分类:
  • hive
阅读更多

        关键字:Hive Join、Hive LEFT|RIGTH|FULL OUTER JOIN、Hive LEFT SEMI JOIN、Hive Cross Join

        Hive中除了支持和传统数据库中一样的内关联、左关联、右关联、全关联,还支持LEFT SEMI JOIN和CROSS JOIN,但这两种JOIN类型也可以用前面的代替。

       注意:Hive中Join的关联键必须在ON ()中指定,不能在Where中指定,否则就会先做笛卡尔积,再过滤。

      

       数据准备:

    hive> desc lxw1234_a;
    OK
    id string
    name string
    Time taken: 0.094 seconds, Fetched: 2 row(s)
    hive> select * from lxw1234_a;
    OK
    1 zhangsan
    2 lisi
    3 wangwu
    Time taken: 0.116 seconds, Fetched: 3 row(s)
    hive> desc lxw1234_b;
    OK
    id string
    age int
    Time taken: 0.159 seconds, Fetched: 2 row(s)
    hive> select * from lxw1234_b;
    OK
    1 30
    2 29
    4 21
    Time taken: 0.09 seconds, Fetched: 3 row(s)

 

10.1 内关联(JOIN)

只返回能关联上的结果。

    SELECT a.id,
    a.name,
    b.age
    FROM lxw1234_a a
    join lxw1234_b b
    ON (a.id = b.id);
     
    --执行结果
     
    1 zhangsan 30
    2 lisi 29

 

10.2 左外关联(LEFT [OUTER] JOIN)

        以LEFT [OUTER] JOIN关键字前面的表作为主表,和其他表进行关联,返回记录和主表的记录数一致,关联不上的字段置为NULL。

       是否指定OUTER关键字,貌似对查询结果无影响。

SELECT a.id,
a.name,
b.age
FROM lxw1234_a a
left join lxw1234_b b
ON (a.id = b.id);
 
--执行结果:
1 zhangsan 30
2 lisi 29
3 wangwu NULL

 

10.3 右外关联(RIGHT [OUTER] JOIN)

       和左外关联相反,以RIGTH [OUTER] JOIN关键词后面的表作为主表,和前面的表做关联,返回记录数和主表一致,关联不上的字段为NULL。

      是否指定OUTER关键字,貌似对查询结果无影响。

SELECT a.id,
a.name,
b.age
FROM lxw1234_a a
RIGHT OUTER JOIN lxw1234_b b
ON (a.id = b.id);
 
--执行结果:
1 zhangsan 30
2 lisi 29
NULL NULL 21

 

10.4 全外关联(FULL [OUTER] JOIN)

        以两个表的记录为基准,返回两个表的记录去重之和,关联不上的字段为NULL。

        是否指定OUTER关键字,貌似对查询结果无影响。

        注意:FULL JOIN时候,Hive不会使用MapJoin来优化。

SELECT a.id,
a.name,
b.age
FROM lxw1234_a a
FULL OUTER JOIN lxw1234_b b
ON (a.id = b.id);
 
--执行结果:
1 zhangsan 30
2 lisi 29
3 wangwu NULL
NULL NULL 21

 

 

10.5 LEFT SEMI JOIN

以LEFT SEMI JOIN关键字前面的表为主表,返回主表的KEY也在副表中的记录。

SELECT a.id,
a.name
FROM lxw1234_a a
LEFT SEMI JOIN lxw1234_b b
ON (a.id = b.id);
 
--执行结果:
1 zhangsan
2 lisi
 
--等价于:
SELECT a.id,
a.name
FROM lxw1234_a a
WHERE a.id IN (SELECT id FROM lxw1234_b);
 
 
--也等价于:
SELECT a.id,
a.name
FROM lxw1234_a a
join lxw1234_b b
ON (a.id = b.id);
 
--也等价于:
SELECT a.id,
a.name
FROM lxw1234_a a
WHERE EXISTS (SELECT 1 FROM lxw1234_b b WHERE a.id = b.id);

 

10.6 笛卡尔积关联(CROSS JOIN)

返回两个表的笛卡尔积结果,不需要指定关联键。

SELECT a.id,
a.name,
b.age
FROM lxw1234_a a
CROSS JOIN lxw1234_b b;
 
--执行结果:
1 zhangsan 30
1 zhangsan 29
1 zhangsan 21
2 lisi 30
2 lisi 29
2 lisi 21
3 wangwu 30
3 wangwu 29
3	wangwu 21

 

Hive中的JOIN类型基本就是上面这些,至于JOIN时候使用哪一种,完全得根据实际的业务需求来定,但起码你要搞清楚这几种关联类型会返回什么样的结果。

除非特殊需求,并且数据量不是特别大的情况下,才可以慎用CROSS JOIN,否则,很难跑出正确的结果,或者JOB压根不能执行完。

经验告诉我,Hive中只要是涉及到两个表关联,首先得了解一下数据,看是否存在多对多的关联。

Hive相关文章(持续更新)

一起学Hive系列

—-Hive概述,Hive是什么

—-Hive函数大全-完整版

—-Hive中的数据库(Database)和表(Table)

—-Hive的安装配置

—-Hive的视图和分区

—-Hive的动态分区

—-向Hive表中加载数据

—-使用Hive命令行

—-Hive的查询语句SELECT

—-Hive中Join的原理和机制

Hive分析函数系列

Hive索引

hive优化之——控制hive任务中的map数和reduce数

 

3
0
分享到:
评论
1 楼 annmi_cai 2016-03-11  
顶顶更健康!

相关推荐

    含两个文件hive-jdbc-3.1.2-standalone.jar和apache-hive-3.1.2-bin.tar.gz

    含两个文件hive-jdbc-3.1.2-standalone.jar和apache-hive-3.1.2-bin.tar.gz 含两个文件hive-jdbc-3.1.2-standalone.jar和apache-hive-3.1.2-bin.tar.gz 含两个文件hive-jdbc-3.1.2-standalone.jar和apache-hive-...

    apache-hive-2.1.1-bin.tar

    apache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tarapache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tarapache-hive-2.1.1-bin.tar apache-hive-2.1.1-...

    Hive-2.1.1-CDH-3.6.1 相关JDBC连接驱动 Jar 包集合

    02、hive-exec-2.1.1-cdh6.3.1.jar 03、hive-jdbc-2.1.1-cdh6.3.1.jar 04、hive-jdbc-2.1.1-cdh6.3.1-standalone.jar 05、hive-metastore-2.1.1-cdh6.3.1.jar 06、hive-service-2.1.1-cdh6.3.1.jar 07、libfb303-...

    Apache Hive(apache-hive-3.1.3-bin.tar.gz)

    Apache Hive(apache-hive-3.1.3-bin.tar.gz、apache-hive-3.1.3-src.tar.gz)是一种分布式容错数据仓库系统,支持大规模分析,并使用 SQL 促进读取、写入和管理驻留在分布式存储中的 PB 级数据。Hive 构建在 Apache...

    hive驱动包hive-jdbc-uber-2.6.5.0-292.jar(用户客户端连接使用)

    Hive是Apache Hadoop生态系统中的一个数据仓库工具,它允许我们对存储在HDFS上的大数据进行结构化查询和分析。Hive JDBC驱动是Hive与各种数据库管理工具、应用程序之间建立连接的关键组件,使得用户可以通过标准的...

    DBeaver链接hive驱动包下载: hive-jdbc-uber-2.6.5.0-292.jar

    《DBeaver与Hive连接:hive-jdbc-uber-2.6.5.0-292.jar驱动详解》 在大数据处理领域,Hive...通过正确配置和使用,开发者可以在DBeaver这个熟悉的环境中高效地进行Hive数据的管理和分析,提升大数据处理的工作效率。

    Apache Hive(apache-hive-1.2.2-bin.tar.gz)

    Apache Hive(apache-hive-1.2.2-bin.tar.gz、apache-hive-1.2.2-src.tar.gz)是一种分布式容错数据仓库系统,支持大规模分析,并使用 SQL 促进读取、写入和管理驻留在分布式存储中的 PB 级数据。Hive 构建在 Apache...

    hive-jdbc-3.1.2-standalone

    hive-jdbc-3.1.2-standalone适用于linux

    hive-jdbc-uber-3.1.2+yanagishima-18.0

    在Kerberos环境中使用Hive JDBC,需要配置相应的安全设置,如获取Kerberos票据并将其嵌入到JDBC连接中,以实现安全的数据访问。 Yanagishima(やなぎしマ)是另一个与Hive相关的开源项目,它提供了一个Web界面,...

    hive-jdbc-jar-多版本.zip

    使用这些JDBC驱动时,你需要在Java代码中加载正确的JAR,并通过JDBC URL指定Hive服务器的信息。例如: ```java Class.forName("org.apache.hive.jdbc.HiveDriver"); Connection con = DriverManager.getConnection...

    Apache Hive(hive-storage-2.8.1.tar.gz)

    Apache Hive(hive-storage-2.8.1.tar.gz、hive-storage-2.7.3.tar.gz)是一种分布式容错数据仓库系统,支持大规模分析,并使用 SQL 促进读取、写入和管理驻留在分布式存储中的 PB 级数据。Hive 构建在 Apache ...

    hive-jdbc-uber-2.6.5.0-292.zip

    标题中的“hive-jdbc-uber-2.6.5.0-292.zip”指的是Hive JDBC驱动的Uber版本,版本号为2.6.5.0-292。...在日常开发和数据分析工作中,正确配置和使用Hive JDBC驱动对高效地进行大数据处理至关重要。

    hive-jdbc-uber-2.6.5.jar

    hive-jdbc-uber-2.6.5.0-292.jar DbVisualizer (as of version 9.5.5) Below is an example configuration using DbVisualizer: Open the Diver Manager dialog ("Tools" > "Driver Manager...") and hit the ...

    hive-jdbc-1.2.1-standalone

    2. 使用`Class.forName()`方法加载Hive JDBC驱动。 3. 创建`Connection`对象,指定Hive服务器的地址、端口、用户名和密码。 4. 创建`Statement`对象,用于执行SQL查询。 5. 执行SQL语句,如`SELECT`, `INSERT`, `...

    hive-1.1.0-cdh5.7.0.tar.gz.rar

    本篇将深入探讨如何安装、配置和使用Hive-1.1.0-cdh5.7.0,以及其在大数据处理中的核心功能和优势。 1. **Hive-1.1.0-cdh5.7.0 版本特性** Hive 1.1.0是Hive发展过程中的一个重要里程碑,它带来了诸多性能改进和新...

    hive-jdbc-1.1.0-cdh5.12.1 连接库 jar包

    使用Hive JDBC,开发人员可以轻松地集成Hive到他们的应用程序中,进行数据导入、查询、更新和删除操作。 Hive-jdbc-1.1.0-cdh5.12.1包含两个jar文件: 1. `hive-jdbc-1.1.0-cdh5.12.1-standalone.jar`:这是一个...

    hive-jdbc-uber-2.6.3.0-292.jar

    - 添加驱动:在DBeaver中,选择“首选项” -> “数据库” -> “JDBC” -> “驱动类型”,然后新建一个驱动,名称可设置为“Hive”,在“类路径”部分添加下载的“hive-jdbc-uber-2.6.3.0-292.jar”文件。...

    flink-connector-hive-2.11-1.13.2-API文档-中文版.zip

    赠送jar包:flink-connector-hive_2.11-1.13.2.jar; 赠送原API文档:flink-connector-hive_2.11-1.13.2-javadoc.jar; 赠送源代码:flink-connector-hive_2.11-1.13.2-sources.jar; 赠送Maven依赖信息文件:flink-...

    hive-jdbc-1.2.1-standalone.jar

    hive-jdbc-1.2.1-standalone.jar hive-jdbc驱动jar包,欢迎下载

Global site tag (gtag.js) - Google Analytics