Hive实验
一、实验目的
学习Hive中常用的select操作。
二、实验设备与器件
PC机、Tempo大数据成长平台
三、实验内容
相关知识
为了完成本关任务,你需要掌握:
select语法格式;
常用的select语法。
select 语法格式
Hive select操作的语法与SQL-92规范几乎没有区别,其格式语法为:
SELECT [ALL | DISTINCT] select_expr,select_expr,… FROM table_reference[WHERE where_condition] [GROUP BY col_list] [CLUSTER BY col_list | [DISTRIBUTE BY col_list] [SORT BY col_list]] [LIMIT number]
select 与各种属性的组合
简单的select查询操作,假如有张学生表,如下面的查询操作返回students表中所有的行和列:
select * from students;
带WHERE子句的select条件查询操作,返回满足WHERE指定条件的行。假如有用户信息表users,有年龄字段age、国籍字段state。下面语句表示从用户信息表users表中查询年龄大于10岁且国籍为中国的用户信息:
select * from users where age > 10 and state = "China";
1
带ALL和DISTINCT关键字的查询操作作用于确定是否返回重复的行,默认为ALL,即select查询返回重复的行。
假如有表t1(coll int,coll2 int),数据为(1,3),(1,3),(1,4),(2,5),则有如下查询:
select coll,coll2 from t1;
1 3
1 3
1 4
2 5select distinct coll,coll2 from t1;
1 3
1 4
2 5select distinct coll from t1;
1
2
带HAVING关键字的查询操作用于代替复杂的子查询操作。
假设如上表结构不变,如下查询操作:
select coll from (select coll,sum(col2) as col2sum from t1 group by coll) t2 where t2.col2sum > 10;
可以替换为:
select coll from t1 group by col1 having sum(col2) >10;
1
带LIMIT关键字的查询操作用于返回指定数目的满足条件记录(常用于返回Top n 问题)。假如对上面t1表查询返回前5条数据,则用如下语句:
select * from t1 limit 5;
1
假如需要查询根据指定条件的Top n问题,则需要用SORT BY col_list [ASC|DESC]语法。如查询t1表中col1的值最大的5条记录:
select * from t1 sort by col1 desc limit 5;
编程要求
请在右侧Begin-End区域中补全代码完成以下任务:
切换到test2数据库;
查询student表中所有的行和列;
查询年龄age > 17的女生female;
查询语文成绩Chinese > 90的记录;
从student表中查询前3条记录;
返回按年龄降序的前2条记录。
1.按照以上要求填写命令。每个要求对应1条命令,共6条命令,以;隔开。
2.由于hive启动时间较长,测评时请耐心等待,大概需要时间:1-3分钟。
3.右侧命令行仅供练习使用,若要进行通关评测,请切换回编译器。
test2数据库中student表结构为:
INFO |
TYPE |
COMMENT |
Sno
|
INT
|
student sno
|
name
|
STRING
|
student name
|
age
|
INT
|
student age
|
sex
|
STRING
|
student sex
|
score
|
STRUCT <Chinese:FLOAT,Math:FLOAT,English:FLOAT>
|
student score
|
表中的数据为:

测试说明
在按编程要求完成操作后,请点击评测按钮,系统会自动对你的操作进行评测。
当你的结果与预期输出一致时,即为通过。
预期输出:
1 Xiaohong 18 female {"chinese":96.0,"math":88.0,"english":90.5}
2 Xiaoliang 17 male {"chinese":95.0,"math":88.0,"english":93.5}
3 Xiaoming 19 male {"chinese":86.5,"math":98.0,"english":91.0}
4 Xiaoguang 18 male {"chinese":88.0,"math":80.0,"english":94.0}
5 Xiaohua 16 female {"chinese":97.0,"math":58.5,"english":88.0}
1 Xiaohong 18 female {"chinese":96.0,"math":88.0,"english":90.5}
1 Xiaohong 18 female {"chinese":96.0,"math":88.0,"english":90.5}
2 Xiaoliang 17 male {"chinese":95.0,"math":88.0,"english":93.5}
5 Xiaohua 16 female {"chinese":97.0,"math":58.5,"english":88.0}
1 Xiaohong 18 female {"chinese":96.0,"math":88.0,"english":90.5}
2 Xiaoliang 17 male {"chinese":95.0,"math":88.0,"english":93.5}
3 Xiaoming 19 male {"chinese":86.5,"math":98.0,"english":91.0}
3 Xiaoming 19 male {"chinese":86.5,"math":98.0,"english":91.0}
4 Xiaoguang 18 male {"chinese":88.0,"math":80.0,"english":94.0}
预期输出说明:
1-5行返回的是查询student表中所有的行和列的结果
6行返回的是查询年龄age > 17的女生female的结果
7-9行返回的是查询语文成绩Chinese > 90的记录的结果
10-12行返回的是从student表中查询前3条记录的结果
12-13行返回的是返回按年龄降序的前2条记录的结果