HIVE当中的关联查询

在hive中没有外键和主键之分。

但是可以进行多表关联查询(值关联)。只要这两个值相等就可以作为关联条件,其实在mysql中也是支持。

mysql中的关联查询

left join 左连接

right join 右连接

innerjoin  全连接、内连接

============

t_user

id name

1 zs

2 ls

3 ww

CREATE  TABLE t_user(id int,name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY'\t';

t_order

id name u_id

1 p1 1

2 p2 1

3 p1 2

CREATE  TABLE t_order(id int,name string,u_id int) ROW FORMAT DELIMITED FIELDSTERMINATED BY '\t';

hive当中的关联查询

1、全连接

join-----两边的数据必需要有关联才会显示。

select *from t_user join t_order on t_user.id=t_order.u_id

2、左外连接

left outerjoin是来自于oracle数据库的语法(左表就没有关联右表数据也会进行显示,只是右表的字段全是null)

select *from t_user left outer join t_order on t_user.id=t_order.u_id

3、右外连接

select *from t_user right outer join t_order on t_user.id=t_order.u_id

4、半连接left semi join

已经有一张人口信息表,需要查询出四川、重庆、广州三个省份的人员信息

mysql如何实现?

select *from t_user where 省份=四川 or 省份=重庆 or 省份=广州

另一种方式是采用in

select *from t_user where 省份 in (四川,重庆,广州)

hive中没有in的语法。但是有一个left semi join【半连接】

select *from t_user left semi join t_order on t_user.id=t_order.u_id

from后面的表为显示表,left semi join后面的表为条件表,只会显示显示表中的内容

执行结果是相同:

select *from t_user where id in (select u_id from t_order);

 

======================

当你做多重关联查询的时候,是否存在一个加载数据的顺序?

顺序第一张是越大越好,还是越小越好?

select *from a1 left outer join b1 on a1.id=b1.a_id left outer join c on c1.id=b.c_id

我会持续在科多大数据学习,也会持续将学到的东西分享给各位,全是干货哟

猜你喜欢

转载自blog.csdn.net/weixin_41852491/article/details/80496998