Hive综合应用案例 — 学生成绩查询

本文通过四个实际案例,包括计算班级语文数学总成绩、查找选修多门课程的学生、统计课程选修人数及数据库课程平均分,展示了Hive在大数据处理中的应用。
摘要由CSDN通过智能技术生成

第1关:计算每个班的语文总成绩和数学总成绩

---------- 禁止修改 ----------
 drop database if exists mydb cascade;
  set hive.auto.convert.join = false;
set hive.ignore.mapjoin.hint=false;
---------- 禁止修改 ----------


---------- begin ----------
---创建mydb数据库
create database if not exists mydb; 
---使用mydb数据库 
use mydb;
---创建表score

create table if not exists score( 
	name string comment '姓名',
	chinese string comment '语文成绩', 
	maths string comment '数学成绩' 
)
row format delimited fields terminated by ',' stored as textfile;
---导入数据:/root/data/step1_files/score.txt
load data local inpath '/root/data/step1_files/score.txt' into table score; 
--创建表class
create table if not exists class( 
	stuname string comment '姓名',
	classname string comment '所在班级' 
)
row format delimited fields terminated by ',' stored as textfile;
---导入数据:/root/data/step1_files/class.txt
load data local inpath '/root/data/step1_files/class.txt' into table class;
--计算每个班的语文总成绩和数学总成绩,要求有哪科低于60分,该名学生成绩不计入计算
select t1.classname,t1.chinese,t2.maths from(
select c.classname classname,sum(s.chinese) chinese from class c,score s
where c.stuname=s.name and s.chinese>=60 group by c.classname) t1,(
select c.classname classname,sum(s.maths) maths from class c,score s
where c.stuname=s.name and s.maths>=60 group by c.classname) t2
where t1.classname=t2.classname; 
---------- end ----------

第2关:查询选修了3门以上的课程的学生姓名

---------- 禁止修改 ----------
 drop database if exists mydb cascade;
  set hive.auto.convert.join = false;
set hive.ignore.mapjoin.hint=false;
---------- 禁止修改 ----------


---------- begin ----------
---创建mydb数据库
create database if not exists mydb; 
---使用mydb数据库 
use mydb;
---创建表my_stu
create table if not exists my_stu( 
  id string comment '学生id',
	name string comment '学生姓名', 
  sex string comment '性别', 
  age string comment '年龄', 
  col string comment '所选的系' 
)
row format delimited fields terminated by ',' stored as textfile;
---导入数据:/root/data/step2_files/my_student.txt
load data local inpath '/root/data/step2_files/my_student.txt' into table my_stu; 
--创建表my_score
create table if not exists my_score( 
  id string comment '学生id',
  courseid string comment '课程id', 
  score string comment '成绩' 
)
row format delimited fields terminated by ',' stored as textfile;
---导入数据:/root/data/step2_files/my_score.txt
load data local inpath '/root/data/step2_files/my_score.txt' into table my_score; 
--创建表my_course
create table if not exists my_course( 
  courseid string comment '课程id',
  coursename string comment '课程名称' 
)
row format delimited fields terminated by ',' stored as textfile;
---导入数据:/root/data/step2_files/my_course.txt
load data local inpath '/root/data/step2_files/my_course.txt' into table my_course; 
---查询选修了3门以上的课程的学生姓名。 
select stu.name,t.coursenum
from(
select id,count(courseid) coursenum from my_score
group by id) t,my_stu stu
where t.coursenum>=3 and stu.id=t.id; 
---------- end ----------

第3关:课程选修人数

---------- 禁止修改 ----------
 drop database if exists mydb cascade;
  set hive.auto.convert.join = false;
set hive.ignore.mapjoin.hint=false;
---------- 禁止修改 ----------


---------- begin ----------
---创建mydb数据库
create database if not exists mydb; 
---使用mydb数据库 
use mydb;
---创建表my_stu
create table if not exists my_stu( 
  id string comment '学生id',
  name string comment '学生姓名', 
  sex string comment '性别', 
  age string comment '年龄', 
  col string comment '所选的系'
)
row format delimited fields terminated by ',' stored as textfile;
---导入数据:/root/data/step2_files/my_student.txt
load data local inpath '/root/data/step2_files/my_student.txt' into table my_stu; 
--创建表my_score
create table if not exists my_score( 
  id string comment '学生id',
  courseid string comment '课程id', 
  score string comment '成绩' 
)
row format delimited fields terminated by ',' stored as textfile;
---导入数据:/root/data/step2_files/my_score.txt
load data local inpath '/root/data/step2_files/my_score.txt' into table my_score; 
--创建表my_course
create table if not exists my_course(
	courseid string comment '课程id',
	coursename string comment '课程名称' 
)
row format delimited fields terminated by ',' stored as textfile;
---导入数据:/root/data/step2_files/my_course.txt
load data local inpath '/root/data/step2_files/my_course.txt' into table my_course; 
---查询每个课程有多少人选修
select t2.coursename,count(*) from(
select t1.name name,course.coursename coursename from(
select stu.name name,score.courseid courseid from my_score score,my_stu stu
where score.id=stu.id) t1,my_course course where t1.courseid=course.courseid) t2 group by t2.coursename;
---------- end ----------

第4关:数据库课程的平均成绩

---------- 禁止修改 ----------
 drop database if exists mydb cascade;
  set hive.auto.convert.join = false;
set hive.ignore.mapjoin.hint=false;
---------- 禁止修改 ----------


---------- begin ----------
---创建mydb数据库
create database if not exists mydb; 
---使用mydb数据库 
use mydb;
---创建表my_stu
create table if not exists my_stu( 
	id string comment '学生id',
	name string comment '学生姓名', 
	sex string comment '性别', 
	age string comment '年龄', 
	col string comment '所选的系' 
)
row format delimited fields terminated by ',' stored as textfile;
---导入数据:/root/data/step2_files/my_student.txt
load data local inpath '/root/data/step2_files/my_student.txt' into table my_stu; 
--创建表my_score
create table if not exists my_score( 
	id string comment '学生id',
	courseid string comment '课程id', 
	score string comment '成绩' 
)
row format delimited fields terminated by ',' stored as textfile;
---导入数据:/root/data/step2_files/my_score.txt
load data local inpath '/root/data/step2_files/my_score.txt' into table my_score; 
--创建表my_course
create table if not exists my_course( 
	courseid string comment '课程id',
	coursename string comment '课程名称' 
)
row format delimited fields terminated by ',' stored as textfile;
---导入数据:/root/data/step2_files/my_course.txt
load data local inpath '/root/data/step2_files/my_course.txt' into table my_course; 
---计算shujuku课程的平均成绩 
select t3.coursename,t2.avg_score from (
select t1.courseid courseid,avg(score.score) avg_score from(
select courseid from my_course
where my_course.coursename='shujuku') t1,my_score score where t1.courseid=score.courseid group by t1.courseid) t2,my_course t3 where t2.courseid=t3.courseid; 
---------- end ----------
### 回答1: Hive是一个大数据分析的开源平台,它提供了很多的综合应用案例,其中之一是用户学历查询。用户学历查询案例中,我们可以使用Hive从数据仓库中读取关于用户的数据,然后通过分析和聚合这些数据,来确定用户的学历信息。在这个过程中,Hive提供了强大的SQL语句支持,以及丰富的函数库,可以满足各种复杂的分析需求。 ### 回答2: 近日,一家大型人力资源公司因为工作中频繁查询员工学历信息而决定使用hive技术来进行数据的处理和分析,通过hive综合应用,实现了更加高效便捷的用户学历查询。 此次项目中,该公司首先进行了数据清洗和处理,将员工学历相关信息从不同的数据源中收集并整合,统一存储在hive的数据仓库中。接着,通过hiveQL语言对数据进行查询和筛选,实现了仅需几秒钟即可得到用户学历信息的目标。使用hive的好处是能够快速处理海量数据,提高查询效率,同时还能实现数据分析和统计,并可视化展示数据结果。 在具体的操作中,该公司将原始数据进行拆分和转换,把不同的表进行组合和分析。同时,在处理数据过程中还运用了一些hadoop生态体系的其他组件,比如pig和spark等工具,以提高效率和处理这些数据所需的时间。在处理完成之后,用户可以通过hive对用户的学历进行查询,根据自己的需要,可以根据职位、学历、工作年限等限定条件来查询,大大地提高了查询精度,也让招聘和人事等相关部门的工作变得更加轻松便捷。 总的来说,该项目成功运用了hive技术,实现了用户学历查询的目标,提升了工作效率和数据查询的准确度。而且此次项目的经验和教训也可以为其他公司和企业在hive技术的运用方面提供借鉴和参考。 ### 回答3: HiveHadoop生态系统中的一项重要技术,它是基于Hadoop的MapReduce框架的数据仓库解决方案,可以进行大规模数据的存储和处理。而学历查询是一个典型的数据查询场景,由于学历查询需要对大量的数据进行快速高效的查询和分析,因此使用Hive进行学历查询可以大大提高查询效率和数据处理能力。 以学历查询为例,如果我们需要查询某个区域内所有人的学历情况,我们需要从海量的数据中筛选出相关的信息,然后进行分析和统计,这个过程需要耗费大量的时间和精力。但是如果使用Hive,我们可以通过Hive的SQL查询语句来快速实现数据查询和分析。 具体来说,如果我们要查询一个城市的所有居民的学历情况,首先要准备好相应的数据表或数据集,然后利用Hive的相关命令将数据导入到Hive表中。在数据导入完成后,我们可以使用类似于SQL的语句来实现查询。例如,我们可以使用Hive的SELECT语句和GROUP BY语句来实现按学历等级进行分组并统计各组的人数。 当然,如果需要更加复杂的查询和分析任务,我们也可以使用Hive进行更多的数据处理和计算任务。例如,Hive支持使用自定义的UDF函数,可以对数据实现更加灵活和精细化的处理。 总而言之,Hive作为一种分布式数据存储和查询解决方案,可以为学历查询等数据处理场景提供快速、高效和可扩展的解决方案。通过合理的数据分析和查询,可以帮助我们更好地了解数据背后的真相,为业务决策提供更多有效的参考和支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值