测试数据和表
数据
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 和 RLike
Like 使用的是 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)
版权声明:《 Hive 的基本运算符 及 查询 》为明妃原创文章,转载请注明出处!
最后编辑:2020-1-19 14:01:45