测试数据和表数据
1 Bob 1200
2 Black 2100
3 BigDataBoy 5600表
create table hive_db(
id int,
name string,
money int
)
row format delimited
fields terminated by '\t';
基本查询格式
select ... from ...
语法格式规范HQL 语言大小写不敏感
HQL 可以写一行,也可以写多行
关键字不能被缩写也不能分行
各子句一般要分行写
使用缩进和换行提高语句的可读性
全表和特定列查询全表查询
select * from 表名;特定列查询
select 字段名,字段名 from 表名;
列别名关键字 as
select 字段名 as 列别名, 字段名 as 列别名 from 表名
算数运算符运算符
描述
A + B
A 加 B
A - B
A 减 B
A * B
A 乘 B
A / B
A 除 B
A % B
A 对 B 取余数
hive> select 1+6;
OK
7
Time taken: 0.117 seconds, Fetched: 1 row(s)
hive> select 2 & 6;
OK
2
Time taken: 0.144 seconds, Fetched: 1 row(s)
hive> select ~6;
OK
-7
Time taken: 0.153 seconds, Fetched: 1 row(s)
常用函数求行数 count(*) ,count() 还能进行其他的统计
hive> select count(*) from hive_db; (会跑一个MapReduce任务)
Query ID = root_20200119201909_4eaa334c-5e26-46e4-8ff9-ef0e4a703394
Total jobs = 1
...
Stage-Stage-1: Map: 1 Reduce: 1 Cumulative CPU: 4.27 sec HDFS Read: 6799 HDFS Write: 2 SUCCESS
Total MapReduce CPU Time Spent: 4 seconds 270 msec
OK
4
Time taken: 131.007 seconds, Fetched: 1 row(s)
最大值 max()
hive> select max(money) from hive_db;
Query ID = root_20200119202349_2d1c7587-554e-4089-8b99-b76cb08ddab1
...
Stage-Stage-1: Map: 1 Reduce: 1 Cumulative CPU: 4.06 sec HDFS Read: 6908 HDFS Write: 5 SUCCESS
Total MapReduce CPU Time Spent: 4 seconds 60 msec
OK
5600
Time taken: 125.705 seconds, Fetched: 1 row(s)最小值 min()
hive> select min(money) from hive_db;总和 sum()
hive> select sum(money) from hive_db;平均值 avg()
hive> select avg(money) from hive_db;
比较运算(Between/In/ Is Null)操作符
支持的数据类型
描述
A = B
基本数据类型
如果 A = B ,返回 True,反之返回 False
A <=> B
基本数据类型
A 、B 有一个为 NULL ,则返回 NULL ; A、B 都为 NULL,返回 True;A = B ,返回 True,反之返回 False;
A <> B,A!=B
基本数据类型
A 、B 有一个为 NULL ,则返回 NULL ;如果 A 不等于 B ,则返回 True,反之返回 False
A < B
基本数据类型
A 、B 有一个为 NULL ,则返回 NULL ; A 小于 B,返回 True ,反之返回 False
A <= B
基本数据类型
A 、B 有一个为 NULL ,则返回 NULL ; A 小于等于 B,返回 True ,反之返回 False
A > B
基本数据类型
A 、B 有一个为 NULL ,则返回 NULL ; A 大于 B,返回 True ,反之返回 False
A >= B
基本数据类型
A 、B 有一个为 NULL ,则返回 NULL ; A 大于等于 B,返回 True ,反之返回 False
A [NOT] BETWEEN B AND C
基本数据类型
A、B、C任一为NULL,则结果为NULL;如果 A 的值在 B、C 之间,则返回 True,反之返回 False;加上 NOT,则是相反的效果
A IS NULL
所有数据类型
如果A等于NULL,则返回TRUE,反之返回FALSE
A IS NOT NULL
所有数据类型
如果A不等于NULL,则返回TRUE,反之返回FALSE
A IN(数值1, 数值2)
基本数据类型
显示该字段 等于 IN() 里数值的数据
A [NOT] LIKE B
STRING 类型
B 是 SQL 下简单的正则表达式,与 A 匹配,则返回 True,反之返回 False;使用 NOT 达到相反的效果
A RLIKE B, A REGEXP B
STRING 类型
B是一个正则表达式,如果A与其匹配,则返回TRUE;反之返回FALSE。匹配使用的是JDK中的正则表达式接口实现的,因为正则也依据其中的规则。例如,正则表达式必须和整个字符串A相匹配,而不是只需与其字符串匹配。
简单例子
# 工资在 2000 到 6000 之间的
hive> select * from hive_db where money between 2000 and 6000;
OK
2 Black 2100
3 BigDataBoy 5600
Time taken: 0.118 seconds, Fetched: 2 row(s)
# 查询 money 为 NULL 的
hive> select * from hive_db where money is null;
OK
NULL NULL NULL
Time taken: 0.227 seconds, Fetched: 1 row(s)
# 查询 money 为 2100 和 5600 的数据
hive> select * from hive_db where money in(2100,5600);
OK
2 Black 2100
3 BigDataBoy 5600
Time taken: 0.21 seconds, Fetched: 2 row(s)
Like 和 RLikeLike 使用的是 SQL语法 下的匹配
% 代表零个或多个字符(任意个字符)。
_ 代表一个字符
%o:匹配 o 开头的
o%:匹配 o 结尾的
%o%:匹配 包含 o 的
_2%:匹配开头 第二位是 2 的
__2_:匹配 4 位,但第3位 是 2 的
# 匹配 name 字段带 o 的
hive> select * from hive_db where name like '%o%';
OK
1 Bob 1200
3 BigDataBoy 5600
Time taken: 0.092 seconds, Fetched: 2 row(s)
RLike 使用的 Java 下的正则表达式
# 匹配 money 中 带有 12 的
hive> select * from hive_db where money rlike '12';
OK
1 Bob 1200
Time taken: 0.075 seconds, Fetched: 1 row(s)
逻辑运算符(And/Or/Not)操作符
含义
And
并
Or
或
Not
否
简单例子
# 查询 money 大于 1000 并 name 是 Bob 的
hive> select * from hive_db where money > 1000 and name = 'Bob';
OK
1 Bob 1200
Time taken: 0.145 seconds, Fetched: 1 row(s)
limit 语句limit 子句用于限定返回的行数
hive> select * from hive_db limit 2;
OK
1 Bob 1200
2 Black 2100
Time taken: 0.196 seconds, Fetched: 2 row(s)
where 语句将不满足条件的过滤掉
where 子句紧随 from 子句
# 查询 money 大于 2000 的
hive> select * from hive_db where money > 2000;
OK
2 Black 2100
3 BigDataBoy 5600
Time taken: 0.172 seconds, Fetched: 2 row(s)