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 的缩写形式。
相关推荐
这个驱动允许用户通过编写SQL语句或者使用类似JDBC的API来连接和查询Hive服务器,执行数据分析任务。 **Dbeaver**是一个开源的通用数据库管理工具,支持多种数据库系统,包括Hive。在Dbeaver中,为了连接到Hive...
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驱动详解》 在大数据处理领域,Hive作为一个基于Hadoop的数据仓库工具,广泛用于数据查询和分析。而DBeaver,作为一款跨平台的数据库管理工具,以其用户友好的...
Hive JDBC允许开发者使用标准的JDBC API来执行SQL查询,获取数据,或者将数据写入Hive表。在给定的标题“hive-jdbc-1.2.1-standalone”中,"standalone"表示这是一个独立的版本,包含了运行Hive JDBC所需的所有依赖...
在大数据处理领域,Hive是一个基于Hadoop的数据仓库工具,它允许用户使用SQL-like的语言(称为HQL)来查询和管理大规模数据集。Hive 2.1.1是其一个稳定版本,提供了诸多增强的功能和性能优化。在这个场景中,我们...
Hive JDBC Uber Driver,即“hive-jdbc-uber-2.6.3.0-292.jar”,是Apache Hive提供的一种集成型JDBC驱动,它使得Java应用程序能够通过标准的JDBC接口与Hive服务器进行通信,实现数据查询、操作和管理。这个特定版本...
在大数据处理领域,Hive是一个基于Hadoop的数据仓库工具,它可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,使得用户能够通过SQL语句对存储在Hadoop分布式文件系统(HDFS)中的大数据进行分析。...
Apache Hive 是一个基于Hadoop的数据仓库工具,它允许用户通过SQL-like语言(称为HQL,Hive Query Language)对大规模数据集进行分析和查询。在Hadoop生态系统中,Hive扮演着数据仓库和数据分析的重要角色,尤其适用...
Hive JDBC允许Java应用作为客户端,与远程Hive服务端建立连接,执行SQL语句,包括创建表、加载数据、执行查询等操作。它提供了标准的JDBC接口,使得开发者可以使用熟悉的SQL语法与Hive进行交互,极大地简化了Hadoop...
Hive JDBC提供了诸如建立连接、发送SQL语句、处理结果集等功能,使得开发者可以轻松地在Hive和应用程序之间建立桥梁。 二、Hive JDBC Uber Jar解析 标题中的“hive-jdbc-uber-2.6.5.0-292.zip”是一个包含Hive JDBC...
1. **图形界面操作**:用户可以通过Dbeaver的GUI创建、修改和删除Hive表,执行SQL查询,并查看结果集。 2. **数据库对象浏览**:显示Hive中的数据库、表、视图等,便于管理和操作。 3. **数据导入导出**:支持将数据...
Apache Hive 是一个基于Hadoop的数据仓库工具,它允许用户通过SQL-like语言(称为HQL,Hive Query Language)对大规模数据集进行分析和查询。Hive最初由Facebook开发,后来成为Apache软件基金会的一个顶级项目,广泛...
3. **Hive Server**:提供了远程访问Hive的接口,支持多种客户端连接方式,如Beeline(一个基于JDBC的命令行工具)和Hive JDBC/ODBC驱动,使得其他应用程序可以方便地与Hive交互。 4. **HQL (Hive Query Language)*...
3. 数据操作:插入、更新、删除和查询Hive表中的数据。 4. 元数据访问:获取关于Hive数据库的结构信息,如表名、列名等。 5. 高级特性:支持事务、批处理、预编译语句等功能。 在动态加载Hive JDBC 1.1.0驱动时,...
3. **Hive SQL(HQL)**:HQL是Hive提供的SQL方言,用于查询和管理数据。它支持SELECT、INSERT、UPDATE、DELETE等基本操作,以及JOIN、GROUP BY、HAVING等复杂查询。 4. **编译与执行计划**:Hive将HQL语句转换为...
配置Hive连接 在`application.properties`中配置Hive服务器的相关信息: ```properties hive.jdbc.url=jdbc:hive2://localhost:10000/default hive.jdbc.driver=com.cloudera.hive.jdbc41.HS2Driver hive.jdbc....
- **表和分区**:Hive支持分桶和分区,便于优化查询性能和管理大量数据。 - **列式存储**:与传统数据库不同,Hive采用列式存储,适合大数据分析场景。 4. **Hive的优化**: - **MapReduce优化**:包括减少Map...
6. **连接器(JDBC/ODBC)**:Hive提供了JDBC和ODBC驱动,使得其他应用程序(如Excel或Tableau)可以通过标准接口连接到Hive,进行数据查询和分析。 7. **Hive与HBase的集成**:CDH中的Hive可以与NoSQL数据库HBase...
3. **HQL(Hive Query Language)**:Hive 提供的 SQL 风格的查询语言,允许用户编写复杂的查询语句来处理大数据。 4. **编译器和优化器**:将 HQL 转换为 MapReduce 作业,同时进行查询优化,如消除冗余操作、选择...