1.2WHERE语句
select语句用于选取字段,WHERE语句用于过滤条件,两者结合使用可以查找到符合过滤条件的记录
可以使用AND和OR相连接,当谓词表达式计算结果为true时,相应的行将被保留并输出
select * from employess
where country=‘US’ and start=‘CA’;
谓词可以引用和select语句中相同的各种对于列值的计算
不能在WHERE语句使用列别名
1.2.1谓词操作符
1.2.2关于浮点数比较
当在hive中写下浮点数(例如:0.2)
hive会把浮点数(0.2)存储为double类型
但是系统中并不能精准表示0.2这个浮点数
正确的浮点数表示
float 0.2 —> 0.2000000
double 0.2 —> 0.200000000000
但是系统中表示为
float 0.2 —> 0.2000001
double 0.2 —> 0.200000000001
如果我们在hive中把 float(0.2)转化成为double(0.2)
实际上是 0.2000001 —> 0.200000100000
并不是 0.2000001 —> 0.200000000001
所以
float(0.2)转化的double(0.2) 是大于直接存储的double(0.2)
float类型和double类型相比较,hive中是自动把范围小的类型转化成为范围大的类型的,也就是float转化为doule
导致float转化成为的double类型的数字大于比较的double数字
所以我们在使用浮点数比较的时候,不要用hive的自动扩充精度来比较,尽量使用较小精度来比较.
也就是float和double比较的时候,把double cast( as float)才能显示正确结果
1.2.3LIKE和RLIKE
RLIKE子句是Hive对LIKE功能的一个扩展,它可以通过java的更强大的正则表达式来指示匹配条件
字符串中的点号(.)表示和任意的字符匹配;星号(*)表示重复左边的字符串零次到无数次;表达式(x|y)表示和x或者y匹配
1.3GROUP BY语句
group by是对检索结果的保留行进行单纯分组,一般总爱和聚合函数一块用例如AVG(),COUNT(),max(),main()等
select c1,c2,count(1),sel(聚合操作)
from table
where con
group by c1,c2
having…
在select语句中可以有多个聚合操作,但是如果多个聚合操作中同时使用了distinct去重,那么distinct去重的列必须相同