join left semi_Hive的left join、left outer join和left semi join三者的区别
Hive的Join的文档说明地址:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual%2BJoins
以下为两个测试数据表建表语句:
MySQL
use test; DROP TABLE IF EXISTS table1; create table table1( student_no bigint comment '学号', student_name string comment '姓名' ) COMMENT 'test 学生信息' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE; DROP TABLE IF EXISTS table2; create table table2( student_no bigint comment '学号', class_no bigint comment '课程号' ) COMMENT 'test 学生选课信息' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE; load data local inpath 'data_table1.txt' overwrite into table table1; load data local inpath 'data_table2.txt' overwrite into table table2;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27use test;
DROP TABLE IF EXISTS table1;
create table table1(
student_no bigint comment '学号',
student_name string comment '姓名'
)
COMMENT 'test 学生信息'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
DROP TABLE IF EXISTS table2;
create table table2(
student_no bigint comment '学号',
class_no bigint comment '课程号'
)
COMMENT 'test 学生选课信息'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
load data local inpath 'data_table1.txt' overwrite into table table1;
load data local inpath 'data_table2.txt' overwrite into table table2;
测试数据为:
hive left join测试数据
测试1:left join
语句:
select * from table1 left outer join table2 on(table1.student_no=table2.student_no);
结果:
FAILED: Parse Error: line 1:22 cannot recognize input near ‘left’ ‘join’ ‘table2’ in join type specifier
我用的HIVE版本是0.8,不支持直接的left join写法;
测试2:left outer join
语句:
select * from table1 left outer join table2 on(table1.student_no=table2.student_no);
结果:
1 name1 1 11
1 name1 1 12
1 name1 1 13
2 name2 2 11
2 name2 2 14
3 name3 3 15
3 name3 3 12
4 name4 4 13
4 name4 4 12
5 name5 5 14
5 name5 5 16
6 name6 NULL NULL
可以看到left outer join左边表的数据都列出来了,如果右边表没有对应的列,则写成了NULL值。
同时注意到,如果左边的主键在右边找到了N条,那么结果也是会叉乘得到N条的,比如这里主键为1的显示了右边的3条。
测试3:left semi join
语句:
select * from table1 left semi join table2 on(table1.student_no=table2.student_no);
结果:
1 name1
2 name2
3 name3
4 name4
5 name5
可以看到,只打印出了左边的表中的列,规律是如果主键在右边表中存在,则打印,否则过滤掉了。
结论:
hive不支持’left join’的写法;
hive的left outer join:如果右边有多行和左边表对应,就每一行都映射输出;如果右边没有行与左边行对应,就输出左边行,右边表字段为NULL;
hive的left semi join:相当于SQL的in语句,比如上面测试3的语句相当于“select * from table1 where table1.student_no in (table2.student_no)”,注意,结果中是没有B表的字段的。
join left semi_Hive的left join、left outer join和left semi join三者的区别相关推荐
- 面试官:说说left join和left semi join 两者有什么区别?
张工是一名程序员,主要是做java开发,有次到一家软件公司面试软件开发岗位,面试官问了他两个问题,其中有一个问题是这样的这样: 说说left join和left semi join 有什么区别? 对于 ...
- Hive in、exists 和 left semi join
with query1 as (select stack(4, 'A', 1, 'B', 2, 'C', 3, 'D', 4) as (k,v) ), query2 as (select stack( ...
- mysql semi join_MySQL 通过semi join 优化子查询
半连接是MySQL 5.6.5引入的,多在子查询exists中使用,对外部row source的每个键值,查找到内部row source匹配的第一个键值后就返回,如果找到就不用再查找内部row sou ...
- join left semi_HIVE--left semi join
实验: hive> select * from b1; OK 1 003 20170511 1 004 20170512 1 005 ...
- Hive left semi join ,select 和 where中不能出现右表字段/不会生成笛卡尔积
1 left semi join的时间比in的时间短,比in高效 2 left semi join时select中不能出现右表的字段,不然报错 3 left semi join 时on中出现左表字 ...
- Hive 实现 IN 和 NOT IN 子句 和 LEFT SEMI JOIN 应用
目前hive不支持 in或not in 中包含查询子句的语法,所以只能通过left join实现. 假设有一个用户浏览商品表skim,和一个用户购买商品表buy.如下 skim表 userId ite ...
- 转载:left join和left semi join的联系和区别
1.联系 他们都是 hive join 方式的一种,join on 属于 common join(shuffle join/reduce join),而 left semi join 则属于 map ...
- hadoop join之semi join
SemiJoin,也叫半连接,是从分布式数据库中借鉴过来的方法.它的产生动机是:对于reduce side join,跨机器的数据传输量非常大,这成了join操作的一个瓶颈,如果能够在map端过滤掉不 ...
- oracle+semijoin,Semi join 与anti join
1.semi join Oracle在处理exists或in的时候,会使用semi join的连接方式: sys@EBANK>select object_name,object_type fro ...
最新文章
- 我是这样给阿里面试官吹 ConcurrentHashMap的
- 一起学习手撕包菜如何做 - 生活至上,美容至尚!
- Spring boot 启动后执行特定的操作
- Java 设计模式之抽象工厂模式
- python数据分析numpy_利用python进行数据分析-NumPy高级应用
- mysql 9.0创建数据库_数据库基础学习——MySQL数据库知识小结(9)
- 图机器学习中的数据增强技术
- jQuery防止多次提交
- JAVA进阶教学之(Date日期的处理)
- 爬虫--BeautifulSoup使用
- ExpandableListActivity列表嵌套列表
- python itertools卡死_Python使用itertools模块来解决算法问题,python
- 使用 RMI + ZooKeeper 实现远程调用
- wps表格在拟合曲线找点_用excel寻找拟合曲线上的某一点的使用方法
- notepadpython插件_Notepad Python
- 如何设计一个优惠券系统
- 根据ip地址定位城市信息
- metasfresh 集成 yetiforce crm
- 二级python试题分值_2020年12月计算机二级各考试科目题型及分值比例
- [每日一氵] python创建简单 command-line interface (CLI) API
热门文章
- html转json有危险字符,javascript
- matlab用dft对连续信号做谱分析,用 DFT 对连续信号进行谱分析的误差问题有哪些?...
- 重试次数配置_Stelnet(ssh)登陆华为交换机配置教程
- switch语句训练
- DeepStream参数配置之sink
- OpenCV3.4.3+Qt5.9.4(QtCreator)开发环境搭建
- 探索软件设计模式(二)
- Delphi一句话帮助
- matlab在伪随机码,MATLAB在伪随机码的生成及仿真中的应用
- 浅析HTTP代理原理--转