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群波波的讲座)