大数据学习路线之hive表的查询
1.join 查询
1、永远是小结果集驱动大结果集(小表驱动大表,小表放在左表)。 2、尽量不要使用join,但是join是难以避免的。
left join 、 left outer join 、 left semi join(左半开连接,只显示左表信息)
hive在0.8版本以后开始支持left join
left join 和 left outer join 效果差不多
hive的join中的on只能跟等值连接 "=",不能跟< >= <= !=
join:不加where过滤,叫笛卡尔积
inner join : 内连接
outer join :外链接
full outer join : 全外连接,寻找表中所有满足连接(包括where过滤)。
##创建学生测试表
CREATE TABLE student (
id INT,
name string,
sex string,
birth string,
department string,
address string
)
row format delimited fields terminated by ','
;
##从本地加载数据
load data local inpath '/root/Desktop/student.txt' into table student;
##创建学生成绩测试表
CREATE TABLE score (
stu_id INT,
c_name string,
grade string
)
row format delimited fields terminated by ','
;
##从hdfs加载数据
load data inpath '/hive.data/score.txt' into table score;
##创建学生基本信息测试表
create table stuinfo(
id int,
height double,
weight double
)
row format delimited fields terminated by ','
;
##从本地加载数据
load data local inpath '/root/Desktop/stuinfo.txt' into table stuinfo;
1.1 左连接
如果左边有数据,右边没有数据,则左边有数据的记录的对应列返回为空。
##使用左连接查询:student表为驱动表,通过id连接
select
student.name,
score.c_name,
score.grade
from student
left join score
on student.id = score.stu_id
;
1.2 左外连接
如果左边有数据,右边没有数据,则左边有数据的记录的对应列返回为空。
##使用左外连接查询:student表为驱动表,通过id连接
select
student.name,
score.c_name,
score.grade
f