前言
大家一定对Hive不陌生吧!Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能(HQL)。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。因此,hive十分适合对数据仓库进行统计分析。
本期内容,我们就来探讨一下,关于Hive数据查询的18种方法!
准备
我们本期内容大部分HQL操作都需要依赖如下两张表,具体的数据内容如下:
course
student
1、SELECT查询语句
SELECT 查询语句比较简单,后面跟要查询的字段,如下所示:
hive (hypers)> select name from student;
OK
name
Rose
Jack
Jimmy
Tom
Jerry
可以为查询语句中的列和表加上别名,如下所示:
hive (hypers)> select t.name from student t;
OK
t.name
Rose
Jack
Jimmy
Tom
Jerry
可以使用如下语句进行嵌套查询:
hive (hypers)> select a.name, b.coursename
> from (select stuid, name from student) a
> join (select stuid, coursename from course) b on a.stuid = b.stuid;
OK
a.name b.coursename
Rose C语言
Jack Java
Jimmy 高等数学
Tom 离散数学
Jerry C++
可以使用正则表达式指定查询的列,如下所示:
hive (hypers)> select t.* from student t;
OK
t.stuid t.name t.sex t.age
15317408 Rose 1 21
15317412 Jack 0 20
15317432 Jimmy 1 21
15317423 Tom 1 20
15317478 Jerry 0 19
15317467 Alice 0 20
可以使用 LIMIT
限制查询的结果条数,如下所示:
hive (hypers)> select * from student limit 1;
OK
student.stuid student.name student.sex student.age
15317408 Rose 1 21
可以使用ORDER BY
语句对结果进行排序,升序我们可以不在排序的字段后加上ASC
(默认),但是倒序需要指定DESC
,如下所示:
hive (hypers)> select * from student order by age desc;
OK
student.stuid student.name student.sex student.age
15317432 Jimmy 1 21
15317408 Rose 1 21
15317467 Alice 0 20
15317423 Tom 1 20
15317412 Jack 0 20
15317478 Jerry 0 19
Time taken: 10.631 seconds, Fetched: 5 row(s)
hive (hypers)> select * from student order by age;
OK
student.stuid student.name student.sex student.age
15317478 Jerry 0 19
15317467 Alice 0 20
15317423 Tom 1 20
15317412 Jack 0 20
15317432 Jimmy 1 21
15317408 Rose 1 21
我们还可以使用CASE...WHEN...THEN
语句对某一列的值进行处理,如下所示:
hive (hypers)> SELECT stuid,
> name,
> age,
> sex,
> CASE
> WHEN sex = '1' THEN '男'
> WHEN sex = '0' THEN '女'
> ELSE '未知'
> END
> FROM student;
OK
stuid name age sex _c4
15317408 Rose 21 1 男
15317412 Jack 20 0 女
15317432 Jimmy 21 1 男
153