`

hive-3 表连接和查询语句简介

    博客分类:
  • hive
 
阅读更多

 

 

1 表连接:
 
Hive只支持等值连接, 诸如 > < 都不支持。
如果连接语句中有WHERE子句,会先执行JOIN子句,再执行WHERE子句, 即 where是过滤join之后的内容。

 

数据:

select * from user;
+------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
|    2 | lisi     |
|    3 | wangwu   |
+------+----------+

 select * from job;
+------+----------+--------+
| id   | job      | userid |
+------+----------+--------+
|    1 | engineer |      1 |
|    2 | painter  |      2 |
|    3 | painter  |      4 |
+------+----------+--------+

a) 内连接:

内连接指的是把符合两边连接条件的数据查询出来。
执行以下语句
select * from user join job on user.id=job.user_id;
+------+----------+------+----------+--------+
| id   | name     | id   | job      | userid |
+------+----------+------+----------+--------+
|    1 | zhangsan |    1 | engineer |      1 |
|    2 | lisi     |    2 | painter  |      2 |
+------+----------+------+----------+--------+

 

b) 左边表的数据全部显示,如果右边表没有对应数据的话,则右侧用null表示。

select * from user left outer join job on user.id=job.userid;

+------+----------+------+----------+--------+
| id   | name     | id   | job      | userid |
+------+----------+------+----------+--------+
|    1 | zhangsan |    1 | engineer |      1 |
|    2 | lisi     |    2 | painter  |      2 |
|    3 | wangwu   | NULL | NULL     |   NULL |
+------+----------+------+----------+--------+

 

c) 右外连接: 右侧表的数据全部显示,左侧表的数据如果查询条件不符合,则用null表示
执行以下语句
select * from user right outer join job on user.id=job.user_id;
+------+----------+------+----------+--------+
| id   | name     | id   | job      | userid |
+------+----------+------+----------+--------+
|    1 | zhangsan |    1 | engineer |      1 |
|    2 | lisi     |    2 | painter  |      2 |
| NULL | NULL     |    3 | painter  |      4 |
+------+----------+------+----------+--------+

 

d)
全外连接
执行以下语句, 左右两侧数据全部显示
select * from user full outer join job on user.id=job.user_id;
+------+----------+------+----------+--------+
| id   | name     | id   | job      | userid |
+------+----------+------+----------+--------+
|    1 | zhangsan |    1 | engineer |      1 |
|    2 | lisi     |    2 | painter  |      2 |
|    3 | wangwu   | NULL | NULL     |   NULL |
| NULL | NULL     |    3 | painter  |      4 |
+------+----------+------+----------+--------+

 

 e) 左半连接
执行以下语句
select * from user left semi join job on user.id=job.user_id;


虽然语法看着像左外连接的语法,但是显示中只有user表的信息,没有job表的信息。

以上语句相当于如下语句
select * from user where user.id in (select user_id from job);
    在where子句使用谓词in的时候,in前面的字段一定带有表名,.因为查询很懒,想不到会将第一个表自动加

到查询条件id中,因此id就不知道是哪个表的id会报错

 

f) 笛卡尔积
    执行以下语句
    select * from user join job;

    笛卡尔积的结果一般不会被直接使用,而是使用其子集。比如在员工考勤统计中,可以做所有员工与所有日期的笛卡尔积,可以非常直观的看到缺勤情况。

 

g) join和where的顺序:

Where子句的执行顺序是位于join子句之后的。大家考虑一下如下两个语句的输出不同。
select * from user left  join job on user.id=job.user_id where job.id =3;
select * from user left  join (select * from job where id =3) job on user.id=job.user_id;
第一条语句无任何输出,因为执行select * from user left  join job on user.id=job.user_id产生的两个记录在执行
过滤 where job.id =3时,没有符合条件的记录。

第二条语句产生三条记录,select * from job where id =3) job是说将查询结果select * from job where id =3
作为表,别名为job,此时结果 左侧uesr 三条全部输出,右侧job结果都为null

 

 

2 排序:

排序指的是对查询结果的显示的排列顺序。
Hive支持ORDER BY子句和SORT BY子句。
当可能有多个reduce任务时,ORDER BY是在一reduce任务中进行排序;
SORT BY是在多个reduce任务内部进行排序,每个reduce任务自己排序,不管全局是否有序。

DISTRIBUTE BY会与SORT BY 一起使用,目的是在SORT BY 排序时把相同分类的数据放到一个reduce中进行排序。
CLUSTER BY 是Distribute by和Sort by 的缩写形式。

 

 

分享到:
评论

相关推荐

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

    这个驱动允许用户通过编写SQL语句或者使用类似JDBC的API来连接和查询Hive服务器,执行数据分析任务。 **Dbeaver**是一个开源的通用数据库管理工具,支持多种数据库系统,包括Hive。在Dbeaver中,为了连接到Hive...

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

    Hive JDBC是Hive提供的一种标准接口,它遵循JDBC API规范,使得任何支持JDBC的应用程序,如Java、Python(通过Jython)或Web应用,都能与Hive服务器建立连接,执行SQL查询并获取结果。使用Hive JDBC,开发人员可以...

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

    《DBeaver与Hive连接:hive-jdbc-uber-2.6.5.0-292.jar驱动详解》 在大数据处理领域,Hive作为一个基于Hadoop的数据仓库工具,广泛用于数据查询和分析。而DBeaver,作为一款跨平台的数据库管理工具,以其用户友好的...

    hive-jdbc-1.2.1-standalone

    Hive JDBC允许开发者使用标准的JDBC API来执行SQL查询,获取数据,或者将数据写入Hive表。在给定的标题“hive-jdbc-1.2.1-standalone”中,"standalone"表示这是一个独立的版本,包含了运行Hive JDBC所需的所有依赖...

    hive-exec-2.1.1.jar

    在大数据处理领域,Hive是一个基于Hadoop的数据仓库工具,它允许用户使用SQL-like的语言(称为HQL)来查询和管理大规模数据集。Hive 2.1.1是其一个稳定版本,提供了诸多增强的功能和性能优化。在这个场景中,我们...

    hive-jdbc-uber-2.6.3.0-292.jar

    Hive JDBC Uber Driver,即“hive-jdbc-uber-2.6.3.0-292.jar”,是Apache Hive提供的一种集成型JDBC驱动,它使得Java应用程序能够通过标准的JDBC接口与Hive服务器进行通信,实现数据查询、操作和管理。这个特定版本...

    hive-jdbc所需jar(精简可用)

    在大数据处理领域,Hive是一个基于Hadoop的数据仓库工具,它可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,使得用户能够通过SQL语句对存储在Hadoop分布式文件系统(HDFS)中的大数据进行分析。...

    apache-hive-2.3.3-bin.tar.gz

    Apache Hive 是一个基于Hadoop的数据仓库工具,它允许用户通过SQL-like语言(称为HQL,Hive Query Language)对大规模数据集进行分析和查询。在Hadoop生态系统中,Hive扮演着数据仓库和数据分析的重要角色,尤其适用...

    hive-jdbc-uber-2.6.5.0-292.jar

    Hive JDBC允许Java应用作为客户端,与远程Hive服务端建立连接,执行SQL语句,包括创建表、加载数据、执行查询等操作。它提供了标准的JDBC接口,使得开发者可以使用熟悉的SQL语法与Hive进行交互,极大地简化了Hadoop...

    hive-jdbc-uber-2.6.5.0-292.zip

    Hive JDBC提供了诸如建立连接、发送SQL语句、处理结果集等功能,使得开发者可以轻松地在Hive和应用程序之间建立桥梁。 二、Hive JDBC Uber Jar解析 标题中的“hive-jdbc-uber-2.6.5.0-292.zip”是一个包含Hive JDBC...

    hive-jdbc-uber-2.6.5.0-292.jar驱动

    1. **图形界面操作**:用户可以通过Dbeaver的GUI创建、修改和删除Hive表,执行SQL查询,并查看结果集。 2. **数据库对象浏览**:显示Hive中的数据库、表、视图等,便于管理和操作。 3. **数据导入导出**:支持将数据...

    apache-hive-2.3.0-bin.tar.gz

    Apache Hive 是一个基于Hadoop的数据仓库工具,它允许用户通过SQL-like语言(称为HQL,Hive Query Language)对大规模数据集进行分析和查询。Hive最初由Facebook开发,后来成为Apache软件基金会的一个顶级项目,广泛...

    apache-hive-2.1.0-bin.tar.gz

    3. **Hive Server**:提供了远程访问Hive的接口,支持多种客户端连接方式,如Beeline(一个基于JDBC的命令行工具)和Hive JDBC/ODBC驱动,使得其他应用程序可以方便地与Hive交互。 4. **HQL (Hive Query Language)*...

    hive-jdbc-1.1.0驱动相关jar包

    3. 数据操作:插入、更新、删除和查询Hive表中的数据。 4. 元数据访问:获取关于Hive数据库的结构信息,如表名、列名等。 5. 高级特性:支持事务、批处理、预编译语句等功能。 在动态加载Hive JDBC 1.1.0驱动时,...

    apache-hive-2.3.9-bin.tar大数据HIVE.zip

    3. **Hive SQL(HQL)**:HQL是Hive提供的SQL方言,用于查询和管理数据。它支持SELECT、INSERT、UPDATE、DELETE等基本操作,以及JOIN、GROUP BY、HAVING等复杂查询。 4. **编译与执行计划**:Hive将HQL语句转换为...

    SpringBoot整合hive-jdbc示例

    配置Hive连接 在`application.properties`中配置Hive服务器的相关信息: ```properties hive.jdbc.url=jdbc:hive2://localhost:10000/default hive.jdbc.driver=com.cloudera.hive.jdbc41.HS2Driver hive.jdbc....

    apache-hive-1.2.2-bin.tar.gz

    - **表和分区**:Hive支持分桶和分区,便于优化查询性能和管理大量数据。 - **列式存储**:与传统数据库不同,Hive采用列式存储,适合大数据分析场景。 4. **Hive的优化**: - **MapReduce优化**:包括减少Map...

    hive-1.1.0-cdh5.7.0.tar

    6. **连接器(JDBC/ODBC)**:Hive提供了JDBC和ODBC驱动,使得其他应用程序(如Excel或Tableau)可以通过标准接口连接到Hive,进行数据查询和分析。 7. **Hive与HBase的集成**:CDH中的Hive可以与NoSQL数据库HBase...

    apache-hive-1.2.1-bin.tar.gz.zip

    3. **HQL(Hive Query Language)**:Hive 提供的 SQL 风格的查询语言,允许用户编写复杂的查询语句来处理大数据。 4. **编译器和优化器**:将 HQL 转换为 MapReduce 作业,同时进行查询优化,如消除冗余操作、选择...

Global site tag (gtag.js) - Google Analytics