在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
我会持续在科多大数据学习,也会持续将学到的东西分享给各位,全是干货哟