HiveSQL一本通 - 案例实操,2024年最新大数据开发编程基础班

count(stu_id) stu_count
from score_info
group by course_id
having stu_count >= 15;
(3)查询结果。
course_id stu_count
01 19
02 19
03 19

6.3.4 查询结果排序和分组指定条件
1.查询学生的总成绩并按照总成绩降序排序

(1)思路分析。
本题主要考查分组聚合和order by关键字的使用。
(2)查询语句。
hive>
select
stu_id,
sum(score) sum_score
from score_info
group by stu_id
order by sum_score desc;
(3)查询结果。
stu_id sum_score
005 377
009 371
002 345
004 326
016 325
007 299
001 290
015 281
020 279
013 244
010 233
018 232
006 220
014 192
017 181
012 180
011 180
019 178
008 129

2.查询一共参加三门课程且其中一门为语文课程的学生的id和姓名

(1)思路分析。
本题主要考查分组group by、使用having关键字进行条件过滤,以及多表关联的综合使用。
第一步: 在course_info表中通过course_name为“语文”查询得到语文课程的course_id。
第二步:在score_info表中查询所有学习语文课程的学生的stu_id。
第三步:利用in关键字结合第二步的查询结果,查询成绩表score_info,得到参加语文课程的学生的所有课程course_id。
第四步:对第三步的查询结果按照stu_id分组,使用count聚合函数得到学生参加的课程数,结合having关键字,筛选聚合结果为3的stu_id。
第五步:将第四步的查询结果与student_info表关联,得到学生姓名stu_name字段。
(2)查询语句。
hive>
select
si.stu_id,
si.stu_name
from student_info si
join
(
select stu_id,
count() cc
from score_info
where stu_id in (select stu_id
from score_info
where course_id = (select course_id from course_info where course_name = ‘语文’))
group by stu_id
having count(
) = 3
) t1
on
si.stu_id=t1.stu_id
(3)查询结果。
stu_id stu_name
006 廖景山
008 宋忠
011 邱钢
012 邓夏波
019 乔颜

6.4 复杂查询练习

1.查询没有学全所有课的学生的学号、姓名

(1)思路分析。
对题目进行分析,没有学全所有课程,也就是说该学生选修的课程数量小于总的课程数量。
本题主要考查分组聚合与多表关联的综合使用。
第一步:将学生表作为主表和成绩表进行left join,并且按照学生学号和姓名分组 对每一个学生所学的课程进行count统计。
第二步:直接通过having的方式进行对没有学全的学生进行过滤。
(2)查询语句。
hive>
select sti.stu_id,
sti.stu_name,
count(sci.course_id)
from student_info sti
left join
score_info sci
on
sti.stu_id = sci.stu_id
group by sti.stu_id, sti.stu_name
having count(sci.course_id)<(select count(*) from course_info)
(3)查询结果。
t2.stu_id t2.stu_name t2.sc_count
001 陈富贵 4
002 李建国 4
003 杨建军 0
004 刘爱党 4
006 廖景山 3
008 宋忠 3
010 吴山 4
011 邱钢 3
012 邓夏波 3
013 许晗晗 4
014 谢思萌 4
015 乔白凝 4
016 钟紫 4
017 熊巧 4
018 黄瑗 4
019 乔颜 3
020 于丝 4

2.查询出只选修了三门课程的全部学生的学号和姓名

(1)思路分析。
本题主要考查分组后的聚合结果过滤,以及关联查询的使用。
第一步:查询成绩表,按照学生学号分组,然后使用count聚合函数对课程数进行统计,然后利用having关键字对数据进行过滤,得到选修课程数为3的结果。将查询结果作为临时表t1。
第二步:对学生表和临时表t1进行关联查询,关联字段为学生学号,获取学生姓名信息。
(2)查询语句。
hive>
select
s.stu_id,
s.stu_name
from student_info s
join (
select
stu_id,
count(course_id) course_count
from score_info
group by stu_id
having course_count =3
) t1
on s.stu_id = t1.stu_id;
(3)查询结果。
s.stu_id s.stu_name
006 廖景山
008 宋忠
011 邱钢
012 邓夏波
019 乔颜

6.5 多表查询练习

6.5.1 表连接
1.查询所有学生的学号、姓名、选课数、总成绩

(1)思路分析。
本题主要考查多表的关联查询和分组聚合的使用。
以学生表作为主表 使用left join和成绩表进行关联查询,stu_id作为关联字段,再按照stu_id和stu_name作为分组字段,最终对课程数和总成绩进行统计。
(2)查询语句。
hive>
select
s.stu_id,
s.stu_name,
count(sc.course_id) count_course,
nvl(sum(sc.score),0) sum_score
from student_info s
left join score_info sc on s.stu_id = sc.stu_id
group by s.stu_id,s.stu_name;
(3)查询结果。
stu_id stu_name course_count course_sum
001 陈富贵 4 290
002 李建国 4 345
003 杨建军 0 0
004 刘爱党 4 326
005 韩华翰 5 377
006 廖景山 3 220
007 孟海 5 299
008 宋忠 3 129
009 韩福 5 371
010 吴山 4 233
011 邱钢 3 180
012 邓夏波 3 180
013 许晗晗 4 244
014 谢思萌 4 192
015 乔白凝 4 281
016 钟紫 4 325
017 熊巧 4 181
018 黄瑗 4 232
019 乔颜 3 178
020 于丝 4 279

2.查询平均成绩大于85的所有学生的学号、姓名和平均成绩

(1)思路分析。
本题依然主要考查多表的关联查询和分组聚合的使用。
以成绩表关联学生表,根据学生学号和学生名称作为分组字段,通过avg()函数获取组内平均成绩,最后使用having关键字过滤聚合结果,得到平均成绩大于85的数据。
(2)查询语句。
hive>
select s.stu_id,
s.stu_name,
avg(sc.score) avg_score
from score_info sc
join student_info s on s.stu_id = sc.stu_id
group by s.stu_id, s.stu_name
having avg_score > 85
(3)查询结果。
stu_id stu_name avg_score
002 李建国 86.25

3.查询学生的选课情况:学号,姓名,课程号,课程名称

(1)思路分析。
本题主要考查多表关联。
根据题目中的信息,需要分别关注成绩表、学生表、课程表,本题关键就是定位表与表之间的关联字段。course_info表和score_info表通过course_id字段进行关联,student_info表和score_info表通过stu_id字段进行关联。
(2)查询语句。
hive>
select
sti.stu_id,
sti.stu_name,
ci.course_id,
ci.course_name
from
student_info sti
left join
score_info sci
on
sti.stu_id=sci.stu_id
left join
course_info ci
on
sci.course_id=ci.course_id
(3)查询结果。
sti.stu_id sti.stu_name ci.course_id ci.course_name
001 陈富贵 01 语文
001 陈富贵 02 数学
001 陈富贵 03 英语
001 陈富贵 04 体育
002 李建国 01 语文
002 李建国 02 数学
002 李建国 03 英语
002 李建国 04 体育
003 杨建军 NULL NULL
004 刘爱党 01 语文
004 刘爱党 02 数学
004 刘爱党 03 英语
004 刘爱党 04 体育

答案一共75行 只做部分展示

4.查询课程编号为03且课程成绩在80分以上的学生的学号和姓名及课程信息

(1)思路分析。
本题主要考查多表关联和条件过滤的综合使用。
第一步:查询成绩表,过滤课程编号为03且课程成绩在80分以上的信息,结果作为临时表t1。
第二步:查询学生表并join临时表t1,关联字段为stu_id,同时join课程表,关联字段为course_id,获取最终结果。
(2)查询语句。
hive>
select
s.stu_id,
s.stu_name,
t1.score,
t1.course_id,
c.course_name
from student_info s
join (
select
stu_id,
score,
course_id
from score_info
where score > 80 and course_id = ‘03’
) t1
on s.stu_id = t1.stu_id
join course_info c on c.course_id = t1.course_id;
(3)查询结果。
s.stu_id s.stu_name t1.score t1.course_id c.course_name
002 李建国 87 03 英语
004 刘爱党 89 03 英语
005 韩华翰 99 03 英语
013 许晗晗 93 03 英语
015 乔白凝 84 03 英语
019 乔颜 93 03 英语
020 于丝 81 03 英语
Time taken: 9.064 seconds, Fetched: 7 row(s)

6.5.2 多表连接
1.课程编号为"01"且课程分数小于60,按分数降序排列的学生信息

(1)思路分析。
第一步:查询成绩表,过滤出课程编号为“01”且课程分数小于60的信息,结果作为临时表t1。
第二步:查询学生表join关联临时表t1,关联字段为stu_id,获取相关学生信息,最后对成绩字段进行倒序排列。
(2)查询语句。
hive>
select
s.stu_id,
s.stu_name,
s.birthday,
s.sex,
t1.score
from student_info s
join (
select
stu_id,
course_id,
score
from score_info
where score < 60 and course_id = ‘01’
) t1
on s.stu_id=t1.stu_id
order by t1.score desc;
(3)查询结果。
s.stu_id s.stu_name s.birthday s.sex t1.score
017 熊巧 1992-07-04 女 58
008 宋忠 1994-02-06 男 56
007 孟海 1999-04-09 男 48
013 许晗晗 1997-11-08 女 47
019 乔颜 1994-08-31 女 46
012 邓夏波 1996-12-21 女 44
018 黄瑗 1993-09-24 女 38
Time taken: 8.936 seconds, Fetched: 7 row(s)

2.查询所有课程成绩在70分以上的学生的姓名、课程名称和分数,按分数升序排列

(1)思路分析。
按照题目要求,本题的关键在于如何查询得到所有课程成绩在70分以上的的学生信息。
第一步:首先需要按照学生学号分组,将sum聚合函数与if逻辑判断函数巧妙联合使用,课程成绩在70分以上计为0,否则为1,再将其sum求和作为flage字段,使用having关键字过滤flage,flage为0的即为所有课程成绩在70分以上的学生学号,作为临时表t1。
第二步:查询学生表,通过join和临时表t1关联,关联字段为stu_id,获取学生姓名息。
第三步:与成绩表和课程表做join关联查询,获得课程名和成绩信息。
(2)查询语句。
hive>
select
s.stu_id,
s.stu_name,
c.course_name,
s2.score
from student_info s
join (
select
stu_id,
sum(if(score >= 70,0,1)) flage
from score_info
group by stu_id
having flage =0
) t1
on s.stu_id = t1.stu_id
join score_info s2 on s.stu_id = s2.stu_id
join course_info c on s2.course_id = c.course_id
order by S2.score
(3)查询结果。
s.stu_id s.stu_name c.course_name s2.course
016 钟紫 语文 71
016 钟紫 英语 71
002 李建国 语文 74
002 李建国 数学 84
002 李建国 英语 87
016 钟紫 数学 89
016 钟紫 体育 94
002 李建国 体育 100
Time taken: 27.166 seconds, Fetched: 8 row(s)

3.查询该学生不同课程的成绩相同的学生编号、课程编号、学生成绩

(1)思路分析。
本题主要考查表关联时关联条件的灵活应用。
此题主要针对成绩表进行查询,关键使用成绩表和自身进行关联来获取数据,关联条件就是学生编号相同、课程编号不同,以及成绩相同。简单来说就是查询一个学生哪些不同课程考了相同的成绩。
(2)查询语句。
hive>
select
sc1.stu_id,
sc1.course_id,
sc1.score
from score_info sc1
join score_info sc2 on sc1.stu_id = sc2.stu_id
and sc1.course_id <> sc2.course_id
and sc1.score = sc2.score;
(3)查询结果。
sc1.stu_id sc1.course_id sc1.score
016 03 71
017 04 34
016 01 71
005 05 85
007 05 63
009 05 79
017 02 34
005 04 85
007 04 63
009 04 79
Time taken: 8.881 seconds, Fetched: 10 row(s)

4.查询课程编号为“01”的课程比“02”的课程成绩高的所有学生的学号

(1)思路分析。
本题主要考查嵌套查询结合join关联查询获取信息。
第一步:首先查询成绩表,将课程编号为01和课程编号为02的信息获取到,结果分别为临时表s1和s2。
第二步:将临时表s1和临时表s2进行join关联,关联字段为学生编号stu_id,并结合s1中的成绩大于s2的成绩为条件进行过滤获取结果。
(2)查询语句。
hive>
select
s1.stu_id
from
(
select
sc1.stu_id,
sc1.course_id,
sc1.score
from score_info sc1
where sc1.course_id =‘01’
) s1
join
(
select
sc2.stu_id,
sc2.course_id,
score
from score_info sc2
where sc2.course_id =“02”
)s2
on s1.stu_id=s2.stu_id
where s1.score > s2.score;
(3)查询结果。
stu_id
001
005
008
010
011
013
014
015
017
019
020

5.查询学过编号为“01”的课程并且也学过编号为“02”的课程的学生的学号、姓名

(1)思路分析。
本题主要考查嵌套查询结合join关联获取信息。
第一步:查询成绩表,获取出课程编号为01的学生编号,再次查询成绩表将课程编号为01的学生编号作为联合条件过滤出同时也选修了课程编号为02的课程的学生编号,查询结果为临时表t1。
第二步:将临时表t1和学生表student_info进行join关联学生姓名。
(2)查询语句。
hive>
select
t1.stu_id as 学号,
s.stu_name as 姓名
from
(
select
stu_id
from score_info sc1
where sc1.course_id=‘01’
and stu_id in (
select
stu_id
from score_info sc2
where sc2.course_id=‘02’
)
)t1
join student_info s
on t1.stu_id = s.stu_id;
(3)查询结果。
学号 姓名
001 陈富贵
002 李建国
004 刘爱党
005 韩华翰
006 廖景山
007 孟海
008 宋忠
009 韩福
010 吴山
011 邱钢
012 邓夏波
013 许晗晗
014 谢思萌
015 乔白凝
016 钟紫
017 熊巧
018 黄瑗
019 乔颜
020 于丝
Time taken: 10.161 seconds, Fetched: 19 row(s)

6.查询学过“李体音”老师所教的所有课的同学的学号、姓名

(1)思路分析。
第一步:根据题目要求,通过将课程表和老师表关联获取“李体音”老师所教课程的课程编号。
第二步:将第一步中获取的课程编号作为条件,查询成绩表获取相关信息,并根据学生编号分组,通过having关键字组内进行过滤,过滤条件很关键,要想获得学过“李体音”老师所教的所有课的同学,必须满足count统计组内条数等于李体音的课程总数的条件。将查询结果作为临时表t1。
第三步:将临时表t1和学生表进行关联查询,获取最终的结果。
(2)查询语句。
hive>
select t1.stu_id,
si.stu_name
from (
select stu_id
from score_info si
where course_id in
(
select course_id
from course_info c
join teacher_info t
on c.tea_id = t.tea_id
where tea_name = ‘李体音’
)
group by stu_id
having count() = (select count()
from course_info c
join teacher_info t
on c.tea_id = t.tea_id
where tea_name = ‘李体音’)
) t1
join student_info si
on t1.stu_id = si.stu_id;
(3)查询结果。
s.stu_id s.stu_name
005 韩华翰
007 孟海
009 韩福
Time taken: 27.16 seconds, Fetched: 3 row(s)

7.查询学过“李体音”老师所讲授的任意一门课程的学生的学号、姓名

(1)思路分析。
本题和上一题的要求相近,区别在于是学过“李体音”老师的所有课还是任意一门。所以在第二步中,不再对查询结果做有条件过滤。
第一步:根据题目要求,通过将课程表和老师表关联获取“李体音”老师所教课程的课程编号。
第二步:将第一步中获取的课程编号作为条件,查询成绩表获取相关信息,并根据学生编号分组,将查询结果作为临时表t1。
第三步:将临时表t1和学生表进行关联查询,获取最终的结果。
(2)查询语句。
hive>
select
t1.stu_id,
si.stu_name
from
(
select
stu_id
from score_info si
where course_id in
(
select
course_id
from course_info c
join teacher_info t
on c.tea_id = t.tea_id
where tea_name=‘李体音’
)
group by stu_id
)t1
join student_info si
on t1.stu_id=si.stu_id;
(3)查询结果。
s.stu_id s.stu_name
001 陈富贵
002 李建国
004 刘爱党
005 韩华翰
007 孟海
009 韩福
010 吴山
013 许晗晗
014 谢思萌
015 乔白凝
016 钟紫
017 熊巧
018 黄瑗
020 于丝
Time taken: 9.391 seconds, Fetched: 14 row(s)

8.查询没学过"李体音"老师讲授的任一门课程的学生姓名

(1)思路分析。
本题考查的是上一题的查询结果的反向查询结果,关键在于not in关键字的使用。
第一步:根据题目要求,通过将课程表和老师表关联获取“李体音”老师所教课程的课程编号。
第二步:将第一步中获取的课程编号作为条件,查询成绩表做in包含查询,获取“李体音”老师所教的学生编号,并根据学生编号分组。
第三步:查询学生信息表,根据第二步查询的结果做not in过滤,获取结果。
(2)查询语句。
hive>
select
stu_id,
stu_name
from student_info
where stu_id not in
(
select
stu_id
from score_info si
where course_id in
(
select
course_id
from course_info c
join teacher_info t
on c.tea_id = t.tea_id
where tea_name=‘李体音’
)
group by stu_id
);
(3)查询结果。
stu_id stu_name
003 杨建军
006 廖景山
008 宋忠
011 邱钢
012 邓夏波
019 乔颜
Time taken: 36.559 seconds, Fetched: 6 row(s)

9.查询至少有一门课与学号为“001”的学生所学课程相同的学生的学号和姓名

(1)思路分析。
本题主要考查多条件数据过滤,关键是分析需求利用逆向思维解题。
第一步:查询成绩表中学生编号为001的课程编号。
第二步:将成绩表和学生表进行关联查询,关联字段为学生编号,并按照学生编号和姓名分组。根据第一步获取的课程编号作为条件做in包含查询。这里还有关键一步就是查询条件中要对001自身进行排除。
(2)查询语句。
hive>
select
si.stu_id,
si.stu_name
from score_info sc
join student_info si
on sc.stu_id = si.stu_id
where sc.course_id in
(
select
course_id
from score_info
where stu_id=‘001’ --001的课程
) and sc.stu_id <> ‘001’ --排除001学生
group by si.stu_id,si.stu_name;
(3)查询结果。
s1.stu_id s2.stu_name
002 李建国
004 刘爱党
005 韩华翰
006 廖景山
007 孟海
008 宋忠
009 韩福
010 吴山
011 邱钢
012 邓夏波
013 许晗晗
014 谢思萌
015 乔白凝
016 钟紫
017 熊巧
018 黄瑗
019 乔颜
020 于丝
Time taken: 8.97 seconds, Fetched: 18 row(s)

10.按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩

(1)思路分析。
本题主要考查多表联查结合分组统计查询。
第一步:查询成绩表,按照学生编号分组,获取每一个学生的平均成绩。作为临时结果表t1。
第二步:查询成绩表,并join关联学生表和课程表,以及临时结果表t1,获取综合信息,最后按照t1中的平均成绩进行order by desc倒序排列。
(2)查询语句。
hive>
select
si.stu_name,
ci.course_name,
sc.score,
t1.avg_score
from student_info si
left join score_info sc
on sc.stu_id=si.stu_id
left join course_info ci
on sc.course_id=ci.course_id
left join
(
select
stu_id,
avg(score) avg_score
from score_info
group by stu_id
)t1
on sc.stu_id=t1.stu_id
order by t1.avg_score desc;
(3)查询结果。
t2.stu_name t2.course_name t2.score t1.avg_score
李建国 数学 84 86.25
李建国 英语 87 86.25
李建国 体育 100 86.25
李建国 语文 74 86.25
刘爱党 体育 59 81.5

熊巧 体育 34 45.25
熊巧 英语 55 45.25
熊巧 数学 34 45.25
熊巧 语文 58 45.25
宋忠 英语 39 43.0
宋忠 语文 56 43.0
宋忠 数学 34 43.0
杨建军 NULL NULL NULL
Time taken: 20.137 seconds, Fetched: 75 row(s)

6.6 本章总结

本章的主要内容是结合前面章节讲解的基础查询语法给出的综合案例练习题,主要考察单表和多表的关联查询中,常用关键字的综合使用,其中包含了对分组聚合的大量练习。本章通过大量的基础练习案例,呈现了Hive SQL语法的基本知识点,并锻炼了读者对业务需求分析的基本思路,旨在使Hive初学者更快更好入门,为后面更复杂的Hive SQL使用和练习做准备。

8. 综合案例练习之初级函数

8.1 环境准备

本章的所有案例基于同一套电商行业的数据库表格,本节主要完成所有的表格创建和数据导入工作。

8.1.1 用户信息表

(1)用户信息表结构如表8-1所示,只展示部分数据。
表8-1 用户信息表结构
user_id(用户id) gender(性别) birthday(生日)
101 男 1990-01-01
102 女 1991-02-01
103 女 1992-03-01
104 男 1993-04-01
(2)执行以下建表语句,创建用户信息表。
hive>
DROP TABLE IF EXISTS user_info;
create table user_info(
user_id string COMMENT ‘用户id’,
gender string COMMENT ‘性别’,
birthday string COMMENT ‘生日’
) COMMENT ‘用户信息表’
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’;
(3)向用户信息表插入数据。
hive>
insert overwrite table user_info
values (‘101’, ‘男’, ‘1990-01-01’),
(‘102’, ‘女’, ‘1991-02-01’),
(‘103’, ‘女’, ‘1992-03-01’),
(‘104’, ‘男’, ‘1993-04-01’),
(‘105’, ‘女’, ‘1994-05-01’),
(‘106’, ‘男’, ‘1995-06-01’),
(‘107’, ‘女’, ‘1996-07-01’),
(‘108’, ‘男’, ‘1997-08-01’),
(‘109’, ‘女’, ‘1998-09-01’),
(‘1010’, ‘男’, ‘1999-10-01’),
(‘1011’, ‘男’, ‘1990-01-01’),
(‘1012’, ‘女’, ‘1991-11-11’);

8.1.2 商品信息表

(1)商品信息表结构如表8-1所示。
表8-2 商品信息表结构
sku_id(商品id) name(商品名称) category_id(分类id) from_date(上架日期) price(商品价格)
1 xiaomi 10 1 2020-01-01 2000
6 洗碗机 2 2020-02-01 2000
9 自行车 3 2020-01-01 1000
(2)执行以下建表语句,创建商品信息表。
hive>
DROP TABLE IF EXISTS sku_info;
CREATE TABLE sku_info(
sku_id string COMMENT ‘商品id’,
name string COMMENT ‘商品名称’,
category_id string COMMENT ‘所属分类id’,
from_date string COMMENT ‘上架日期’,
price double COMMENT ‘商品单价’
) COMMENT ‘商品信息表’
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’;
(3)向商品信息表插入数据。
hive>
insert overwrite table sku_info
values (‘1’, ‘xiaomi 10’, ‘1’, ‘2020-01-01’, 2000),
(‘2’, ‘手机壳’, ‘1’, ‘2020-02-01’, 10),
(‘3’, ‘apple 12’, ‘1’, ‘2020-03-01’, 5000),
(‘4’, ‘xiaomi 13’, ‘1’, ‘2020-04-01’, 6000),
(‘5’, ‘破壁机’, ‘2’, ‘2020-01-01’, 500),
(‘6’, ‘洗碗机’, ‘2’, ‘2020-02-01’, 2000),
(‘7’, ‘热水壶’, ‘2’, ‘2020-03-01’, 100),
(‘8’, ‘微波炉’, ‘2’, ‘2020-04-01’, 600),
(‘9’, ‘自行车’, ‘3’, ‘2020-01-01’, 1000),
(‘10’, ‘帐篷’, ‘3’, ‘2020-02-01’, 100),
(‘11’, ‘烧烤架’, ‘3’, ‘2020-02-01’, 50),
(‘12’, ‘遮阳伞’, ‘3’, ‘2020-03-01’, 20),
(‘13’, ‘长粒香’, ‘2’, ‘2020-01-01’, 20.0),
(‘14’, ‘金龙鱼’, ‘2’, ‘2021-01-01’, 20.0),
(‘15’, ‘巧乐兹’, ‘2’, ‘2020-01-01’, 20.0),
(‘16’, ‘费列罗’, ‘2’, ‘2022-01-01’, 20.0);

8.1.3 商品分类信息表

(1)商品分类信息表结构如表8-1所示。
表8-3 商品分类信息表结构
category_id(分类id) category_name(分类名称)
1 数码
2 厨卫
3 户外
(2)执行以下建表语句,创建商品分类信息表。
hive>
DROP TABLE IF EXISTS category_info;
create table category_info(
category_id string,
category_name string
) COMMENT ‘商品分类信息表’
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’;
(3)向商品分类信息表插入数据。
hive>
insert overwrite table category_info
values (‘1’,‘数码’),
(‘2’,‘厨卫’),
(‘3’,‘户外’);

8.1.4 订单信息表

(1)订单信息表结构如表8-1所示。
表8-4 订单信息表结构
order_id(订单id) user_id(用户id) create_date(下单日期) total_amount(订单金额)
1 101 2021-09-30 29000.00
10 103 2020-10-02 28000.00
(2)执行以下建表语句,创建订单信息表。
hive>
DROP TABLE IF EXISTS order_info;
create table order_info(
order_id string COMMENT ‘订单id’,
user_id string COMMENT ‘用户id’,
create_date string COMMENT ‘下单日期’,
total_amount decimal(16, 2) COMMENT ‘订单总金额’
) COMMENT ‘订单信息表’
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’;
(3)向订单信息表插入数据。
hive>
insert overwrite table order_info
values (‘1’, ‘101’, ‘2021-09-27’, 29000.00),
(‘2’, ‘101’, ‘2021-09-28’, 70500.00),
(‘3’, ‘101’, ‘2021-09-29’, 43300.00),
(‘4’, ‘101’, ‘2021-09-30’, 860.00),
(‘5’, ‘102’, ‘2021-10-01’, 46180.00),
(‘6’, ‘102’, ‘2021-10-01’, 50000.00),
(‘7’, ‘102’, ‘2021-10-01’, 75500.00),
(‘8’, ‘102’, ‘2021-10-02’, 6170.00),
(‘9’, ‘103’, ‘2021-10-02’, 18580.00),
(‘10’, ‘103’, ‘2021-10-02’, 28000.00),
(‘11’, ‘103’, ‘2021-10-02’, 23400.00),
(‘12’, ‘103’, ‘2021-10-03’, 5910.00),
(‘13’, ‘104’, ‘2021-10-03’, 13000.00),
(‘14’, ‘104’, ‘2021-10-03’, 69500.00),
(‘15’, ‘104’, ‘2021-10-03’, 2000.00),
(‘16’, ‘104’, ‘2021-10-03’, 5380.00),
(‘17’, ‘105’, ‘2021-10-04’, 6210.00),
(‘18’, ‘105’, ‘2021-10-04’, 68000.00),
(‘19’, ‘105’, ‘2021-10-04’, 43100.00),
(‘20’, ‘105’, ‘2021-10-04’, 2790.00),
(‘21’, ‘106’, ‘2021-10-04’, 9390.00),
(‘22’, ‘106’, ‘2021-10-05’, 58000.00),
(‘23’, ‘106’, ‘2021-10-05’, 46600.00),
(‘24’, ‘106’, ‘2021-10-05’, 5160.00),
(‘25’, ‘107’, ‘2021-10-05’, 55350.00),
(‘26’, ‘107’, ‘2021-10-05’, 14500.00),
(‘27’, ‘107’, ‘2021-10-06’, 47400.00),
(‘28’, ‘107’, ‘2021-10-06’, 6900.00),
(‘29’, ‘108’, ‘2021-10-06’, 56570.00),
(‘30’, ‘108’, ‘2021-10-06’, 44500.00),
(‘31’, ‘108’, ‘2021-10-07’, 50800.00),
(‘32’, ‘108’, ‘2021-10-07’, 3900.00),
(‘33’, ‘109’, ‘2021-10-07’, 41480.00),
(‘34’, ‘109’, ‘2021-10-07’, 88000.00),
(‘35’, ‘109’, ‘2020-10-08’, 15000.00),
(‘36’, ‘109’, ‘2020-10-08’, 9020.00),
(‘37’, ‘1010’, ‘2020-10-08’, 9260.00),
(‘38’, ‘1010’, ‘2020-10-08’, 12000.00),
(‘39’, ‘1010’, ‘2020-10-08’, 23900.00),
(‘40’, ‘1010’, ‘2020-10-08’, 6790.00),
(‘41’, ‘101’, ‘2020-10-08’, 300.00),
(‘42’, ‘101’, ‘2021-01-01’, 260.00),
(‘43’, ‘101’, ‘2021-01-02’, 280.00),
(‘44’, ‘101’, ‘2021-01-03’, 420.00),
(‘45’, ‘101’, ‘2021-01-04’, 240.00),
(‘46’, ‘1011’, ‘2021-09-26’, 240.00),
(‘47’, ‘1011’, ‘2021-10-24’, 240.00),
(‘48’, ‘1011’, ‘2022-09-24’, 240.00),
(‘49’, ‘1012’, ‘2022-09-24’, 2010.00);

8.1.5 订单明细表

(1)订单明细表结构如表8-1所示。
表8-5 订单明细表结构
order_detail_id(订单明细id) order_id(订单id) sku_id(商品id) create_date(下单日期) price(商品单价) sku_num(商品件数)
1 1 1 2021-09-30 2000.00 2
2 1 3 2021-09-30 5000.00 5
22 10 4 2020-10-02 6000.00 1
23 10 5 2020-10-02 500.00 24
24 10 6 2020-10-02 2000.00 5
(2)执行以下建表语句,创建订单明细表。
hive>
DROP TABLE IF EXISTS order_detail;
CREATE TABLE order_detail
(
order_detail_id string COMMENT ‘订单明细id’,
order_id string COMMENT ‘订单id’,
sku_id string COMMENT ‘商品id’,
create_date string COMMENT ‘下单日期’,
price decimal(16, 2) COMMENT ‘下单时的商品单价’,
sku_num int COMMENT

你可能感兴趣的:(程序员,大数据)