hive|student文件在hive中的简单查询

资料准备:

student_without_head.csv下载地址:https://wwyl.lanzoum.com/ijyVu0ttyg8h

一、创建一个新的文件夹

1
hadoop fs -mkdir /hadoop_class/hive_student

二、将student文档从本地上传到hadoop

1
hadoop fs -copyFromLocal ~/student_without_head.csv /hadoop_class/hive_student

三、在hive里面创建表

1
2
create external table student (id int,name string,sex string,age int,test int,height int,num string,room int) row format delimited fields terminated by ','
location '/hadoop_class/hive_student';

这是一个创建外部表 student 的 SQL 语句,其具体解释如下:
create external table: 创建外部表。
student: 表名。
(id int,name string,sex string,age int,test int,height int,num VARCHAR,room int): 定义表中的列名和数据类型,其中 int 表示整型,string 表示字符串型,VARCHAR 表示可变长度的字符型。
row format delimited fields terminated by ',': 定义了行格式为分隔符分隔的文本文件格式,字段之间使用逗号 , 分隔。
location '/hadoop_class/student_wordcount': 定义了该表所对应的外部数据存储位置。
通过这条 SQL 语句可以创建一个名为 student 的外部表,用于读取 /hadoop_class/student_wordcount 路径下的逗号分隔文本文件。

四、查表

1
select * from student;

(我这里的num用varchar报错,用INT或INTEGER也为null,只能用string)

图片

五、计算查询 男女比例

1
2
3
SELECT sex, COUNT(*) AS count, 100.0 * COUNT(*) / SUM(COUNT(*)) OVER() AS ratio
FROM student
GROUP BY sex;

这段SQL语句可以用于查询一个名为”student”的表中,每个性别的统计信息,包括人数和比例。其中:

sex表示性别列
COUNT(*)用于计算每个性别的人数
AS count为人数起一个别名
100.0 * COUNT(*) / SUM(COUNT(*)) OVER()用于计算比例,其中SUM(COUNT(*)) OVER()表示对所有记录进行计数求和,并将其作为分母,100.0 * COUNT(*)表示将人数乘以100作为分子
AS ratio为比例起一个别名
GROUP BY sex用于按性别对结果进行分组,以便在每个性别中计算人数和比例。
最终结果将包含两列:性别和对应的人数、比例。

图片

1
2
3
select t1.male/t2.female as sex_percent from
(select count(1) as male from student where sex='男')t1,
(select count(1) as female from student where sex='女')t2 where 1 = 1;
1
set hive.mapred.mode=nostrict;

用于关闭 MapReduce 作业的严格模式。在此模式下,Hive 允许 MapReduce 作业覆盖现有目录,并启用表的动态分区。但是,如果使用不当,它也可能导致数据丢失或意外后果。

图片

六、计算查询平均身高

1
select avg(height) from student;

图片

七、计算查询不同room的平均身高

1
2
3
select room, avg(height) as avg_height
from student
group by room;

图片