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 的缩写形式。
相关推荐
#(执行下面的语句 *.*:所有库下的所有表 %:任何IP地址或主机都可以连接) GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION; FLUSH PRIVILEGES; 6. Jline包版本不一致的问题...
java根据excel生成 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 ...
Hive提供了jdbc驱动,使得我们可以用Java代码来连接Hive并进行一些类关系型数据库的sql语句查询等操作。同关系型数据库一样,我们也需要将Hive的服务打开;在Hive 0.11.0版本之前,只有HiveServer服务可用,你得在...
今天小编就为大家分享一篇hive-shell批量命令执行脚本的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
hive练习数据和hive练习题包含了hive练习数据,hive数据的建表ddl和hive练习题,非常适合做hive练习,新手培训,快速...LEFT SEMI JOIN Hive当前没有实现 IN/EXISTS 子查询,可以用 LEFT SEMI JOIN 重写子查询语句。
测试连接impala的工具类,通过输入ip:port/database,以及查询语句就可测试
HQL 中对查询语句的解释、优化、生成查询计划是由 Hive 完成的 所有的数据都是存储在 Hadoop 中 查询计划被转化为 MapReduce 任务,在 Hadoop 中执行(有些查询没有 MR 任 务,如: select * from table ) ...
jdbc连接hive的驱动,亲测可以连接hive1.1版本和2.1版本:hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能...
下面是Hive的架构图。图1.1Hive体系结构(1)用户接口主要有三个:CLI,Client和WUI。其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。...(3)解释器、编译器、优化器完成HQL查询语句从词法分析、语
免费的第三方可视化工具,基于eclipse开发。简洁方便,支持大部分数据库的连接,比如mysql,oracle,hive,phoenix等,界面大方,对于eclipse用户相当友好,支持sql语句生成。方便开发!
Hive表的建表语句,除了静态表外,其他全部为天级别外部分区表binglog2Hive_conf.properties:里面为所有全部需要同步到HDFS的表mysql.properties:Mysql druid连接池配置程序说明binlog解析框架:核心类为...
SQL Developer提供了PL/SQL程序的端到端开发,运行查询工作表的脚本,管理数据库的DBA控制台,报表接口,完整的数据建模的解决方案,并且能够支持将你的第三方数据库迁移至Oracle。 SQL Developer可以连接到任何...
先说说思路:1是直接从mysql输出至hive中,另外一个是先将数据搞到hdfs中,再load一下,...抽取数据,插入的目标库中有没有对应为表的话点击下方的SQL,会默认执行DDL语句,create一下表,接下来NEXT 成功!当然具体的
开发人员只需要通过一条SQL语句即可实现对数据库的增删改查,完全实现了代码的可重用性和对象的持久化。当然,由于作者的水平有限,该套框架目前还处于开发阶段,目前发布的是第一个版本(1.0.1)。该套框架是开源的...
oracle sql语句的执行过程和原理介绍,优化器模式,访问table的方式,表的连接方式及索引分类
1、说明:datax支持presto读取,datax规范开发插件,读取presto中数据,可以在presto中配置mysql、postgresql、es、hive等数据库的连接,通过datax执行关联查询,数据存入新的库 2、插件更新:解压文件 prestoreader...
将数据从 RDBMS 导入 HDFS 在 Hive 中使用相应的工具和命令(例如 LOAD DATA 语句),手动将数据载入 Hive 或 Hbase 大数据-sqoop全文共16页,当前为第4页。 Sqoop版本区别 功能 Sqoop1 Sqoop2 数据从 Hive 或 ...
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)和...