hive|student文件在hive中的简单查询
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 | 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 ',' |
这是一个创建外部表 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 | SELECT sex, COUNT(*) AS count, 100.0 * COUNT(*) / SUM(COUNT(*)) OVER() AS ratio |
这段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 | select t1.male/t2.female as sex_percent from |
1 | set hive.mapred.mode=nostrict; |
用于关闭 MapReduce 作业的严格模式。在此模式下,Hive 允许 MapReduce 作业覆盖现有目录,并启用表的动态分区。但是,如果使用不当,它也可能导致数据丢失或意外后果。
六、计算查询平均身高
1 | select avg(height) from student; |
七、计算查询不同room的平均身高
1 | select room, avg(height) as avg_height |