基于Hive的教务成绩分析管理系统(一)

一、 实验概览
1.1实验介绍
Hive是由Facebook开源用于解决海量结构化日志的数据统计。Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。本质是上将HQL转化成MapReduce程序。由于 Hive 采用了类似SQL 的查询语言 HQL(Hive Query Language),因此很容易将 Hive 理解为数据库。其实从结构上来看,Hive 和数据库除了拥有类似的查询语言,再无类似之处。本文将从多个方面来阐述 Hive 和数据库的差异。数据库可以用在 Online 的应用中,但是Hive 是为数据仓库而设计的,清楚这一点,有助于从应用角度理解 Hive 的特性。

本实验通过一系列的教务模拟数据,通过各项指标分析,锻炼学生的Hive-sql动手能力。

1.2实验目标
通过本实验,学生能熟练掌握Hive的常见建表建库工具,掌握数据的导入导出方法,尤其是掌握Hive-Sql中重点的sql语法,达到熟练应用的程度。

1.3实验知识点
本实验中我们将实践以下知识:

·Hive 建表建库操作

·Hive内部表、外部表定义以及互转

·分区表的创建以及删除

·Hive的常用语法函数

·分区表的创建以及删除

1.4实验环境
·JDK 1.8 (已安装)

·Hadoop 2.7.1(已安装)

·Hive1.2.1(已安装)

1.5预备知识点
Hive的安装以及基本语法使用技巧。

二、实验原理
本实验通过一系列的教务模拟数据,通过各项指标分析,锻炼学生的Hive-sql动手能力。

三、实验步骤
步骤1:启动集群,启动hive
【代码】

  1. source /etc/profile
  2. hadoop-daemon.sh start namenode
  3. hadoop-daemon.sh start datanode
  4. yarn-daemon.sh start resourcemanager
  5. yarn-daemon.sh start nodemanager

[等待15秒左右]

  1. service mysql start
  2. hive

【运行结果截屏】

步骤2: 建库建表
2.1 表字段认知

数据表介绍

–1.学生表
Student(SId,Sname,Sage,Ssex)
–SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别

–2.课程表
Course(CId,Cname,TId)
–CId 课程编号,Cname 课程名称,TId 教师编号

–3.教师表
Teacher(TId,Tname)
–TId 教师编号,Tname 教师姓名

–4.成绩表
SC(SId,CId,score)
–SId 学生编号,CId 课程编号,score 分数

2.2创建上school数据库

【代码】

  1. create database school;
  2. show databases;
  3. use school;

【运行结果截屏】

2.3 创建表

【代码】

  1. 创建学生表
    create table student(s_id string,s_name string,s_birth string,s_sex string) row format delimited fields terminated by ’ ';
  2. 创建课程表
    create table course(c_id string,c_name string,t_id string) row format delimited fields terminated by ’ ';
  3. 创建老师表
    create table teacher(t_id string,t_name string) row format delimited fields terminated by ’ ';
  4. 创建分数表
    create table score(s_id string,c_id string,s_score int) row format delimited fields terminated by ’ ';

【运行结果截屏】

步骤3: 创建学生表本地数据,并且导入到对应表中
3.1创建本地数据

【代码】

vi /root/student.csv

3.2 写入如下数据

01 赵雷 1990-01-01 男
02 钱电 1990-12-21 男
03 孙风 1990-05-20 男
04 李云 1990-08-06 男
05 周梅 1991-12-01 女
06 吴兰 1992-03-01 女
07 郑竹 1989-07-01 女
08 王菊 1990-01-20 女

3.3导入数据

【代码】

load data local inpath ‘/root/student.csv’ into table student;

【运行结果截屏】

3.4查看表数据

步骤4: 创建课程表本地数据,并且导入到对应表中
4.1创建本地数据

【代码】

vi /root/course.csv

4.2 写入如下数据

01 语文 02
02 数学 01
03 英语 03

4.3导入数据

【代码】

load data local inpath ‘/root/course.csv’ into table course;

【运行结果截屏】

4.4查看表数据

步骤5: 创建教师表本地数据,并且导入到对应表中
5.1创建本地数据

【代码】

vi /root/teacher.csv

5.2 写入如下数据

01 张三
02 李四
03 王五

5.3导入数据

【代码】

load data local inpath ‘/root/teacher.csv’ into table teacher;

【运行结果截屏】

5.4查看表数据

步骤6: 创建教师表本地数据,并且导入到对应表中
6.1创建本地数据

【代码】

vi /root/score.csv

6.2 写入如下数据

01 01 80
01 02 90
01 03 99
02 01 70
02 02 60
02 03 80
03 01 80
03 02 80
03 03 80
04 01 50
04 02 30
04 03 20
05 01 76
05 02 87
06 01 31
06 03 34
07 02 89
07 03 98

6.3导入数据

【代码】

load data local inpath ‘/root/score.csv’ into table score;

【运行结果截屏】

select * from score;

【运行结果截屏】

步骤7: 项目指标分析
7.1查询"01"课程比"02"课程成绩高的学生的信息及课程分数

【代码】

select student.*,a.s_score as 01_score,b.s_score as 02_score
from student
join score a on student.s_id=a.s_id and a.c_id=‘01’
left join score b on student.s_id=b.s_id and b.c_id=‘02’
where a.s_score>b.s_score;

【运行结果截屏】

7.2查询"01"课程比"02"课程成绩高的学生的信息及课程分数(答案2)

【代码】

select student.*,a.s_score as 01_score,b.s_score as 02_score
from student
join score a on a.c_id=‘01’
join score b on b.c_id=‘02’
where a.s_id=student.s_id and b.s_id=student.s_id and a.s_score>b.s_score;

【运行结果截屏】

7.3查询"01"课程比"02"课程成绩低的学生的信息及课程分数(答案1)

【代码】

select student.*,a.s_score as 01_score,b.s_score as 02_score
from student
join score a on student.s_id=a.s_id and a.c_id=‘01’
left join score b on student.s_id=b.s_id and b.c_id=‘02’
where a.s_score<b.s_score;

【运行结果截屏】

7.4查询"01"课程比"02"课程成绩低的学生的信息及课程分数(答案2)

【代码】

select student.*,a.s_score as 01_score,b.s_score as 02_score
from student
join score a on a.c_id=‘01’
join score b on b.c_id=‘02’
where a.s_id=student.s_id and b.s_id=student.s_id and a.s_score<b.s_score;

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐