hive的6种join操作

1.join2.left join3.right join4.full join5.left semi join6.cross join

hive中的join操作的关键字必须在on中指定,不能再where中指定,不然会先做笛卡尔积再过滤;

join关键字默认为内连接,返回两张表中都有的信息;

left join以前面的表作为主表和其他表进行关联,返回的记录数和主表的记录数相同,关联不上的字段用NULL;

left [outer] join对其无影响;

right join与left相反,以后面的表为主表,和前面的表做关联,返回的记录数和主表一致,关联不上的字段为NULL;

full join为全关联,返回两个表记录的并集,关联不上的字段为NULL;

注意:full join时,hive不会用mapjoin来优化;

left semi join以关键字前面的表为主表,两个表对on的条件字段做交集,返回前面表的记录;

cross join(笛卡尔积关联)返回两个表的笛卡尔积结果,不需要指定关联键;

  1. SELECT a.id,
  2. a.name,
  3. b.age
  4. FROM lxw1234_a a
  5. CROSS JOIN lxw1234_b b;
  6.  
  7. --执行结果:
  8. 1 zhangsan30
  9. 1 zhangsan29
  10. 1 zhangsan21
  11. 2 lisi30
  12. 2 lisi29
  13. 2 lisi21
  14. 3 wangwu30
  15. 3 wangwu29
  16. 3 wangwu21

除非特殊需求,并且数据量不是特别大的情况下,才可以慎用CROSS JOIN,否则,很难跑出正确的结果,或者JOB压根不能执行完


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值