文章目录
一、实战概述
- 本次实战以Hive为核心,针对学生成绩数据进行统计分析。首先,在虚拟机中创建
score.txt
文件存储五名学生的成绩记录,并上传至HDFS的/hivescore/input
路径下。接着启动Hive Metastore服务和客户端,创建与成绩表结构对应的内部表t_score
,并运用load data命令将HDFS数据导入该表。最后,通过编写SQL语句按学生姓名分组,对各科成绩求和计算总分、平均分。此过程充分展示了Hive在大数据处理中的高效性及便利性,只需简单SQL即可实现复杂的数据统计任务,为深入数据分析实践提供了有力支持。
二、提出任务
成绩表,包含六个字段(姓名、语文、数学、英语、物理、化学),有五条记录
姓名语文数学英语物理化学李小双8978949687王丽霞9480867880吴雨涵9067858260张晓红8776907959陈燕文9795928886利用Hive框架,计算每个同学的总分与平均分
吴雨涵 404404.0
张晓红 391391.0
李小双 444444.0
王丽霞 418418.0
陈燕文 458458.0
三、完成任务
(一)准备数据文件
1、在虚拟机上创建文本文件
- 在master虚拟机上创建
score.txt
文件
李小双 8978949687
王丽霞 9480867880
吴雨涵 9067858260
张晓红 8776907959
陈燕文 9795928886
2、将文本文件上传到HDFS指定目录
- 在HDFS上创建
/hivescore/input
目录 - 将score.txt文件上传到HDFS的
/hivescore/input
目录
(二)实现步骤
1、启动Hive Metastore服务
- 执行命令:
hive --service metastore &
,在后台启动metastore服务
2、启动Hive客户端
- 执行命令:
hive
,看到命令提示符hive>
3、创建Hive表,加载HDFS数据文件
- 创建内部表
t_score
,执行命令: CREATE TABLE t_score ( name STRING, chinese INT, math INT, english INT, physics INT, chemistry INT ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ';
- 在MySQL的hive数据库的
TBLS
表里可以查看内部表t_score
对应的记录 - 先进入
mysql
,更改数据库,执行命令:use metastore;
- 然后查看内部表对应的记录,执行命令:
select TBL_ID,DB_ID,TBL_NAME,TBL_TYPE from TBLS;
- 加载成绩数据文件到内部表
t_score
,执行命令:load data inpath '/hivescore/input/score.txt' into table t_score;
- 查看成绩表全部记录,执行语句:
select * from t_score;
4、利用Hive SQL统计总分与平均分
- 编写Hive SQL语句,进行词频统计
- 执行命令:
SELECT name, SUM(chinese + math + english + physics + chemistry) AS total_score, AVG(chinese + math + english + physics + chemistry) AS average_score FROM t_score GROUP BY name;
- 这个SQL语句的功能是在一个名为
t_score
的表中,根据学生的姓名(name)进行分组,并对每个学生各科成绩进行统计计算。 SELECT name
: 选择t_score
表中的name列,表示我们要按照姓名来显示结果。SUM(chinese + math + english + physics + chemistry) AS total_score
: 对每个学生的语文、数学、英语、物理和化学成绩进行求和,并将这一结果命名为total_score
。这将计算出每个学生的总分。AVG(chinese + math + english + physics + chemistry) AS average_score
: 对每个学生的语文、数学、英语、物理和化学成绩进行求平均值,并将这一结果命名为average_score
。这将计算出每个学生的平均分。FROM t_score
: 指定数据来源是名为t_score的表。GROUP BY name
: 根据name列进行分组,这意味着对于表中的每一条具有不同姓名的记录,都会分别进行总分和平均分的计算。- 因此,这个SQL语句的最终功能是输出一个结果集,其中包含每个学生的姓名、他们的总分以及平均分。
四、拓展练习
- 改变输出格式
SELECT CONCAT('(', name, ',', total_score, ',', average_score, ')') AS formatted_scores FROM ( SELECT name, SUM(chinese + math + english + physics + chemistry) AS total_score, AVG(chinese + math + english + physics + chemistry) AS average_score FROM t_score GROUP BY name ) subquery;
- 子查询(Subquery)在SQL中是指嵌套在另一个查询语句内部的查询。它是一个独立的SELECT语句,作为外部查询的一部分(如WHERE、FROM或JOIN子句中的一个表达式),用于从数据库中检索数据来帮助定义外部查询的行为。
- 简单来说,子查询首先会执行其内部的查询逻辑,获取结果集,然后这个结果集被用作外部查询条件或者与其他表的数据进行比较、连接等操作。
版权归原作者 0806820 所有, 如有侵权,请联系我们删除。