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三者的区别相关推荐

  1. 面试官:说说left join和left semi join 两者有什么区别?

    张工是一名程序员,主要是做java开发,有次到一家软件公司面试软件开发岗位,面试官问了他两个问题,其中有一个问题是这样的这样: 说说left join和left semi join 有什么区别? 对于 ...

  2. 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( ...

  3. mysql semi join_MySQL 通过semi join 优化子查询

    半连接是MySQL 5.6.5引入的,多在子查询exists中使用,对外部row source的每个键值,查找到内部row source匹配的第一个键值后就返回,如果找到就不用再查找内部row sou ...

  4. join left semi_HIVE--left semi join

    实验: hive> select * from b1; OK 1       003     20170511 1       004     20170512 1       005     ...

  5. Hive left semi join ,select 和 where中不能出现右表字段/不会生成笛卡尔积

    1 left semi join的时间比in的时间短,比in高效 2 left semi join时select中不能出现右表的字段,不然报错 3  left semi  join 时on中出现左表字 ...

  6. Hive 实现 IN 和 NOT IN 子句 和 LEFT SEMI JOIN 应用

    目前hive不支持 in或not in 中包含查询子句的语法,所以只能通过left join实现. 假设有一个用户浏览商品表skim,和一个用户购买商品表buy.如下 skim表 userId ite ...

  7. 转载:left join和left semi join的联系和区别

    1.联系 他们都是 hive join 方式的一种,join on 属于 common join(shuffle join/reduce join),而 left semi join 则属于 map ...

  8. hadoop join之semi join

    SemiJoin,也叫半连接,是从分布式数据库中借鉴过来的方法.它的产生动机是:对于reduce side join,跨机器的数据传输量非常大,这成了join操作的一个瓶颈,如果能够在map端过滤掉不 ...

  9. oracle+semijoin,Semi join 与anti join

    1.semi join Oracle在处理exists或in的时候,会使用semi join的连接方式: sys@EBANK>select object_name,object_type fro ...

最新文章

  1. 我是这样给阿里面试官吹 ConcurrentHashMap的
  2. 一起学习手撕包菜如何做 - 生活至上,美容至尚!
  3. Spring boot 启动后执行特定的操作
  4. Java 设计模式之抽象工厂模式
  5. python数据分析numpy_利用python进行数据分析-NumPy高级应用
  6. mysql 9.0创建数据库_数据库基础学习——MySQL数据库知识小结(9)
  7. 图机器学习中的数据增强技术
  8. jQuery防止多次提交
  9. JAVA进阶教学之(Date日期的处理)
  10. 爬虫--BeautifulSoup使用
  11. ExpandableListActivity列表嵌套列表
  12. python itertools卡死_Python使用itertools模块来解决算法问题,python
  13. 使用 RMI + ZooKeeper 实现远程调用
  14. wps表格在拟合曲线找点_用excel寻找拟合曲线上的某一点的使用方法
  15. notepadpython插件_Notepad Python
  16. 如何设计一个优惠券系统
  17. 根据ip地址定位城市信息
  18. metasfresh 集成 yetiforce crm
  19. 二级python试题分值_2020年12月计算机二级各考试科目题型及分值比例
  20. [每日一氵] python创建简单 command-line interface (CLI) API

热门文章

  1. html转json有危险字符,javascript
  2. matlab用dft对连续信号做谱分析,用 DFT 对连续信号进行谱分析的误差问题有哪些?...
  3. 重试次数配置_Stelnet(ssh)登陆华为交换机配置教程
  4. switch语句训练
  5. DeepStream参数配置之sink
  6. OpenCV3.4.3+Qt5.9.4(QtCreator)开发环境搭建
  7. 探索软件设计模式(二)
  8. Delphi一句话帮助
  9. matlab在伪随机码,MATLAB在伪随机码的生成及仿真中的应用
  10. 浅析HTTP代理原理--转