Hive连接查询

现有两张表:sales 列出了人名及其所购商品的 ID;things 列出商品的 ID 和名称:

hive> select * from sales;
OK
Joe     2
Hank    4
Ali     0
Eve     3
Hank    2
Time taken: 0.085 seconds, Fetched: 5 row(s)
hive> select * from things;
OK
2       Tie
4       Coat
3       Hat
1       Scarf
Time taken: 0.069 seconds, Fetched: 4 row(s)

1.内连接

  Hive只支持等值连接,这意味着在 ON 关键字后的表达式中只能使用等号。

hive> select sales.*,things.*
    > from sales JOIN things ON(sales.id = things.id);
Joe     2       2       Tie
Hank    4       4       Coat
Eve     3       3       Hat
Hank    2       2       Tie

  此外还可以在Where子句中指定连接条件。

hive> select sales.*,things.*
    > from sales,things
    > where sales.id = things.id;
OK
Joe     2       2       Tie
Hank    4       4       Coat
Eve     3       3       Hat
Hank    2       2       Tie

  单个的连接用一个 MR 作业实现。但是,如果多个连接的连接条件中使用了相同的列,那么平均每个连接可以至少用一个 MR 作业来实现。

可以在查询前使用 Explain 关键字来查看 Hive将为某个查询使用多少个 MR 作业:【此部分在以后详述

hive> explain
    > select sales.*,things.*
    > from sales join things on (sales.id=things.id);

2.外连接

    外连接可以让你找到连接表中不能匹配的数据行。

    前面的内连接,【Ali】那一行没有出现在输出中。因为她所购买商品的ID没有在things表中出现。

  左外连接:就可以显示左边表的所有数据行:T_Name1 LEFT OUTER JOIN T_Name2 ON()

hive> select sales.*,things.*
    > from sales LEFT OUTER JOIN things ON(sales.id = things.id);
OK
Joe     2       2       Tie
Hank    4       4       Coat
Ali     0       NULL    NULL
Eve     3       3       Hat
Hank    2       2       Tie
Time taken: 13.387 seconds, Fetched: 5 row(s)

  右外连接:T_Name1 RIGHT OUTER JOIN T_Name2 ON()

hive> select sales.*,things.*
    > from sales RIGHT OUTER JOIN things ON(sales.id = things.id);
OK
Joe     2       2       Tie
Hank    2       2       Tie
Hank    4       4       Coat
Eve     3       3       Hat
NULL    NULL    1       Scarf
Time taken: 14.54 seconds, Fetched: 5 row(s)

  全外连接:T_Name1 FULL OUTER JOIN T_Name2 ON()

hive> select sales.*,things.*
    > from sales FULL OUTER JOIN things ON(sales.id = things.id);
OK
Ali     0       NULL    NULL
NULL    NULL    1       Scarf
Hank    2       2       Tie
Joe     2       2       Tie
Eve     3       3       Hat
Hank    4       4       Coat
Time taken: 44.671 seconds, Fetched: 6 row(s)

  半连接:T_Name1 LEFT SEMI JOIN T_Name2 ON()  

hive> select * from things
    > where things.id in
    > (select id from sales);
OK
2       Tie
4       Coat
3       Hat
Time taken: 15.633 seconds, Fetched: 3 row(s)

  这种IN查询可以转化为 半连接查询 :

  左半连接查询必须遵循一个限制:右表(sales)只能在ON子句中出现。例如,不能在Select表达式中引用右表。

hive> select * from things
    > LEFT SEMI JOIN sales ON(sales.id=things.id);
OK
2       Tie
4       Coat
3       Hat
Time taken: 13.169 seconds, Fetched: 3 row(s)
时间: 2024-10-28 02:16:22

Hive连接查询的相关文章

Hive的join表连接查询的一些注意事项

Hive支持的表连接查询的语法: 1 join_table: 2 table_reference JOIN table_factor [join_condition] 3 | table_reference {LEFT|RIGHT|FULL} [OUTER] JOIN table_reference join_condition 4 | table_reference LEFT SEMI JOIN table_reference join_condition 5 | table_referenc

hive的查询注意事项以及优化总结 .

一.控制Hive中Map和reduce的数量 Hive中的sql查询会生成执行计划,执行计划以MapReduce的方式执行,那么结合数据和集群的大小,map和reduce的数量就会影响到sql执行的效率. 除了要控制Hive生成的Job的数量,也要控制map和reduce的数量. 1. map的数量,通常情况下和split的大小有关系,之前写的一篇blog“map和reduce的数量是如何定义的”有描述. hive中默认的hive.input.format是org.apache.hadoop.h

建立HBase的集群和HDInsight在Hadoop中使用Hive来查询它们

在本教程中,您将学习如何创建和查询HDInsight使用HiveHadoop的HBase的表.下列步骤描述:?如何使用提供在Azure门户的HBase的集群.?如何启用和使用RDP访问HBase的外壳,并使用HBase的外壳创建HBase的示例表,添加行,然后列出表中的行.?如何创建一个Hive表映射到一个现有的HBase的表,使用HiveQL查询数据在HBase的表.?如何使用Microsoft HBase的REST客户端库.NET创建一个新的HBase的表,列出您帐户中的HBase的表,以及

【大数据】SparkSql连接查询中的谓词下推处理(一)

本文首发于 vivo互联网技术 微信公众号 作者:李勇 目录: 1.SparkSql 2.连接查询和连接条件 3.谓词下推 4.内连接查询中的谓词下推规则 4.1.Join后条件通过AND连接 4.2.Join后条件通过OR连接 4.3.分区表使用OR连接过滤条件 1.SparkSql SparkSql 是架构在 Spark 计算框架之上的分布式 Sql 引擎,使用 DataFrame 和 DataSet 承载结构化和半结构化数据来实现数据复杂查询处理,提供的 DSL可以直接使用 scala 语

Oracle 连接查询<一>

在Oracle数据库中,连接查询分为交叉连接.内连接.外链接3种类型.其中,交叉连接结果是所有其他连接结果的超集,而外连接结果又是内连接结果的超集. 交叉连接 交叉连接又称为笛卡尔积连接,是两个或多个 表之间的无条件连接.一个表中所有记录分别与其他表中所有记录进行记录.如果进行连接的表分别有n1,n2,n3...条记录,那么交叉连接的结果集中将有n1 x n2 x n3 x...条记录.例如,emp表中有14条记录,dept表中有4条记录,那么两个交叉连接后有56条记录,语句为 SQL> SEL

表连接查询与where后使用子查询的性能分析。

子查询就是在一条查询语句中还有其它的查询语句,主查询得到的结果依赖于子查询的结果. 子查询的子语句可以在一条sql语句的FROM,JOIN,和WHERE后面,本文主要针对在WHERE后面使用子查询与表连接查询的性能做出一点分析. 对于表连接查询和子查询性能的讨论众说纷纭,普遍认为的是表连接查询的性能要高于子查询.本文将从实验的角度,对这两种查询的性能做出验证,并就实验结果分析两种查询手段的执行流程对性能的影响. 首先准备两张表 1,访问日志表mm_log有150829条记录(相关sql文件已放在

Mysql 表连接查询

1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.     内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和courses表中学生标识号相同的所有行.       2.外联接.外联接可以是左向外联接.右向外联接或完整外部联接.     在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:     1)LEFT  JOIN或LEFT OUTER JOIN     左向外联接的结果集包括  LEF

MySQL数据库实验三:连接查询

实验三    连接查询 实验名称:连接查询(2课时) 一.实验目的 理解JOIN语句的操作和基本使用方法,掌握内连接.外连接.自身连接的概念和使用. 二.实验环境 是MS SQL SERVER 2005的中文客户端. 三.实验示例 1. 查询每个学生及其选修课程的情况 SELECT  Student.*,SC.* FROM     Student,SC WHERE  Student.Sno = SC.Sno: 2.检索至少选修课程号为C2和C4的学生学号 SELECT X.S# FROM SC

7-09内连接查询

多表连接查询:实际上是通过各个表之间共同列的关联行来查询数据的,它是关系数据库查询最主要的特征. 连接查询的分类: 内连接:根据表中共同的列进行匹配. 内连接的特点: 两个表存在主外键关系 参与查询两个表的地位相同无主次之分. 内连接查询就是两个表的数据放到一起相同的数据就是内连接查询. 内连接的实现方式: 1:使用WHERE语句指定连接条件. 2:在FROM语句中使用INNER JOIN..ON. 查询订单编号,还有商品编号: SELECT OrderInfo.OrderId,UserInfo