hive中的join的一些操作

create table IF NOT EXISTS gw(orderId string,orderType string,money int)
row format delimited fields terminated by '\001';


create table IF NOT EXISTS pay(orderId string,orderType string,money int)
    row format delimited fields terminated by '\001';

以上是创建了两个hive的表,其中表明分别为gw及其pay,两个表中的字段是一样的一个是订单号orderId,一个是订单类型orderType ,一个是支付金额money 。但是gw表里面是代表已经支付了的,pay是代表未支付的,我们就是设置了一个这个背景而已。
这里写图片描述

这里写图片描述

load data local inpath '/hadoop/data/pay.txt' into table pay;

load data local inpath '/hadoop/data/pay.txt' into table pay;

上面代码是将本地的两个txt文件中的数据分别加载到对应的hive表中。
这里写图片描述

这里写图片描述

这是两个表中的数据。

left join 操作:

select * from gw left join pay on gw.orderId=pay.orderId;

这里写图片描述
以左侧的表为标准 全部输出,然后右侧表根据条件去匹配,匹配不到的直接用NULL填充

inner join操作:

select * from gw inner join pay on gw.orderId=pay.orderId;

这里写图片描述
匹配符合条件的两个表数据并进行合并成一条记录格式

right join 操作:

参考left join结果,以右表为标准全部输出,坐标匹配不到的用NULL填充。

left semi join 操作:

select * from gw left semi join pay on gw.orderId=pay.orderId;

这里写图片描述
其实类似于inner join只不过只是输结果在左表,右表不输出

full outer join 操作:

select * from gw full outer join pay on gw.orderId=pay.orderId;

这里写图片描述
按照条件查询满足条件的合并到一行,左表存在的右表不存在那么右表填充NULL,反之,右表存在的左表不存在那么左表填充NULL。

————————————-

left join 适合做not exits查询,比如我们执行后右侧等于null的我们便可以找到了;left semi join 适合做exits查询,执行后我们可以看到两个表共有的,并且只输出左表共同有的。

(本文源自学习hadoop群波波的讲座)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值