`

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 的缩写形式。

 

 

分享到:
评论

相关推荐

    hivesql语句练习

    #(执行下面的语句 *.*:所有库下的所有表 %:任何IP地址或主机都可以连接) GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION; FLUSH PRIVILEGES; 6. Jline包版本不一致的问题...

    java根据excel生成 hive建表语句

    java根据excel生成 hive建表语句 可以根据自己的格式修改

    Hive使用手册Hive使用手册

    4 Hive 表相关语句 3 4.1 Hive 建表: 3 4.1.1使用LIKE关键字创建一个与已有表模式相同的新表: 4 4.2 Hive 修改表 4 4.2.1 Hive 新增一个字段: 4 4.2.2 Hive 修改字段名/字段类型/字段位置/字段注释: 4 4.2.3 ...

    hadoop+hive+mapreduce的java例子

     Hive提供了jdbc驱动,使得我们可以用Java代码来连接Hive并进行一些类关系型数据库的sql语句查询等操作。同关系型数据库一样,我们也需要将Hive的服务打开;在Hive 0.11.0版本之前,只有HiveServer服务可用,你得在...

    hive-shell批量命令执行脚本的实现方法

    今天小编就为大家分享一篇hive-shell批量命令执行脚本的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    hive练习数据和练习题及答案

    hive练习数据和hive练习题包含了hive练习数据,hive数据的建表ddl和hive练习题,非常适合做hive练习,新手培训,快速...LEFT SEMI JOIN Hive当前没有实现 IN/EXISTS 子查询,可以用 LEFT SEMI JOIN 重写子查询语句。

    ImpalaTest-1.0-SNAPSHOT.jar

    测试连接impala的工具类,通过输入ip:port/database,以及查询语句就可测试

    Hive用户指南(Hive_user_guide)_中文版.pdf

    HQL 中对查询语句的解释、优化、生成查询计划是由 Hive 完成的 所有的数据都是存储在 Hadoop 中 查询计划被转化为 MapReduce 任务,在 Hadoop 中执行(有些查询没有 MR 任 务,如: select * from table ) ...

    ClouderaHiveJDBC41-2.6.5.1007.zip

    jdbc连接hive的驱动,亲测可以连接hive1.1版本和2.1版本:hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能...

    Hive体系结构介绍

    下面是Hive的架构图。图1.1Hive体系结构(1)用户接口主要有三个:CLI,Client和WUI。其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。...(3)解释器、编译器、优化器完成HQL查询语句从词法分析、语

    dbeaver-ce-7.0.2-x86_64-setup.exe+hive驱动

    免费的第三方可视化工具,基于eclipse开发。简洁方便,支持大部分数据库的连接,比如mysql,oracle,hive,phoenix等,界面大方,对于eclipse用户相当友好,支持sql语句生成。方便开发!

    Binlog2Hive:MySQL增量数据实时同步到HDFSHive

    Hive表的建表语句,除了静态表外,其他全部为天级别外部分区表binglog2Hive_conf.properties:里面为所有全部需要同步到HDFS的表mysql.properties:Mysql druid连接池配置程序说明binlog解析框架:核心类为...

    sqldeveloper-21.4.3.x64+jdk1.8

    SQL Developer提供了PL/SQL程序的端到端开发,运行查询工作表的脚本,管理数据库的DBA控制台,报表接口,完整的数据建模的解决方案,并且能够支持将你的第三方数据库迁移至Oracle。 SQL Developer可以连接到任何...

    使用kettle将mysql中的数据导入到hive中

    先说说思路:1是直接从mysql输出至hive中,另外一个是先将数据搞到hdfs中,再load一下,...抽取数据,插入的目标库中有没有对应为表的话点击下方的SQL,会默认执行DDL语句,create一下表,接下来NEXT 成功!当然具体的

    easysql,中国人自己开发的类似Hibernate的框架,使用简单

    开发人员只需要通过一条SQL语句即可实现对数据库的增删改查,完全实现了代码的可重用性和对象的持久化。当然,由于作者的水平有限,该套框架目前还处于开发阶段,目前发布的是第一个版本(1.0.1)。该套框架是开源的...

    sql执行过程_原理_优化

    oracle sql语句的执行过程和原理介绍,优化器模式,访问table的方式,表的连接方式及索引分类

    datax支持presto读取

    1、说明:datax支持presto读取,datax规范开发插件,读取presto中数据,可以在presto中配置mysql、postgresql、es、hive等数据库的连接,通过datax执行关联查询,数据存入新的库 2、插件更新:解压文件 prestoreader...

    大数据-sqoop.pptx

    将数据从 RDBMS 导入 HDFS 在 Hive 中使用相应的工具和命令(例如 LOAD DATA 语句),手动将数据载入 Hive 或 Hbase 大数据-sqoop全文共16页,当前为第4页。 Sqoop版本区别 功能 Sqoop1 Sqoop2 数据从 Hive 或 ...

    Hadoop权威指南 第二版(中文版)

     1.6.1 托管表(Managed Tables)和外部表(External Tables)  1.6.2 分区(Partitions)和桶(Buckets)  1.6.3 存储格式  1.6.4 导入数据  1.6.5 表的修改  1.6.6 表的丢弃  1.7 查询数据  1.7.1 排序(Sorting)和...

Global site tag (gtag.js) - Google Analytics