千家信息网

hive WHERE语句的用法

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容介绍了"hive WHERE语句的用法"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!WHER
千家信息网最后更新 2026年11月03日hive WHERE语句的用法

本篇内容介绍了"hive WHERE语句的用法"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!


WHERE语句

SELECT语句用于选取字段,WHERE语句用于过滤条件,两者结合使用可以查找到符合过滤条件的记录。之前我们已经在很多简单例子中使用过它了,现在我们深入学习一下它吧。

WHERE语句使用谓词表达式,对于列应用在谓词操作符上的情况,稍后我们将进行讨论。有几种谓词表达式可以使用AND和OR相连接。当谓词表达式计算结果为true时,相应的行将被保留并输出。

注:WHERE后面是不可以使用别名的,如果想使用别名,那可以使用嵌套语句去查询。

1.谓词操作符

下面这些谓词操作符可以用于JOIN... ON和HAVING语句中。


操作符

支持的数据类型

描述

A=B

基本数据类型

如果A等于B则返回TRUE,反之返回FLASE

A<=>B

基本数据类型

如果A和B都为NULL则返回TRUE,其他的和等号(=)操作符的结果一致,如果任一为NULL则结果为NULL

A==B

没有

这个是错误的语法!SQL使用=,而不是==

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[NOT] BETWEEN B AND C

基本数据类型

如果A,B或者C任一为NULL,则结果为NULL,如果A的值大于或等于B而且小于或等于C,则结果为TRUE,反之为FLASE。如果使用NOT关键字则可达到相反的效果

A IS NULL

所有数据类型

如果A等于NULL则返回TRUE;反之返回FLASE

A IS NOT NULL

所有数据类型

如果A不等于NULL则返回TRUE;反之返回FLASE

A [NOT] LIKE B

STRING 类型

B是一个SQL下的简单正则表达式,如果A与其匹配的话,则返回TRUE;反之返回FLASE。B的表达式说明如下:'x%'表示A必须以字母'x'开头,'%x'表示A必须以字母'x'结尾,而'%x%'表示A包含有字母'x',可以位于开头,结尾或者字符串中间。类似地,下划线'_'匹配单个字符。B必须要和整个字符串A相匹配才行。如果使用NOT关键字则可达到相反的效果

A RLIKE B,A REGEXP B

STRING 类型

B是一个正则表达式,如果A与其相匹配,则返回TRUE;反之返回FLASE。匹配使用的是JDK中的正则表达式接口实现的,因为正则规则也依据其中的规则。例如,正则表达式必须和整个字符串A想匹配,而不是只需与其子字符串匹配。

2.关于浮点数比较

浮点数比较的一个常见陷井出现在不同类型间做比较的时候(也就是FLOAT和DOUBLE比较)。

eg:下面这个对员工的查询语句,该语句将返回员工姓名,工资和联邦税,过滤条件是薪水的减免税款超过0.2(之前定义的deductions的map的值是FLOAT类型的)

hive> SELECT name,salary,deductions['Federal Taxes']
> FROM employees WHERE deductions['Federal Taxes']>0.2;
John Doe 100000.0 0.2
Mary Smith 80000.0 0.2
Boss Man 200000.0 0.3
Fred Finance 150000.0 0.3


Wait!为什么deductions['Federal Taxes']=0.2的记录也被输出了?

这是Hive的Bug吗?这其实反映了内部是如何进行浮点数比较的,这个问题几乎影响了在现在数字计算机中所有使用各种各样编程语言编写的软件。

实际上我们可以说0.2对于FLOAT类型是0.2000001,而对于DOUBLE类型是0.200000000001。这是因为一个8字节的DOUBLE值具有更多的小数位。当表中的FLOAT值通过Hive转换为DOUBLE值时,其产生的DOUBLE值是0.200000100000,这个值实际要比0.200000000001大。这就是为什么这个查询结果像是使用了>=似的。

这个问题并非仅仅存在于Hive中或Java中,而其他系统也会出现这个问题。

Hive有两种规避这个问题的方法。

1.如果使用存储格式为TEXTFILE,那么Hive会从数据文件中读取字符串"0.2",然后将其转换成一个真实的数字。我们可以在表模式中定义对应的字段类型为DOUBLE而不是FLOAT,这样我们就可以对deductions['Federal Taxes']这个DOUBLE值和0.2这个DOUBLE值进行比较。

2.使用cast操作符改变数据类型

eg:下面是修改后的语句和结果

hive> SELECT name,salary,deductions['Federal Taxes']
> FROM employees WHERE deductions['Federal Taxes']>cast(0.2 AS FLOAT);
Boss Man 200000.0 0.3
Fred Finance 150000.0 0.3

"hive WHERE语句的用法"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

类型 数据 语句 表达式 结果 字符 操作符 谓词 字符串 正则 问题 字母 实际 更多 条件 点数 查询 输出 关键 关键字 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 江苏根荣互联网科技 北京路客互联网科技有限公司 互联网科技垄断 互联网科技网站 深圳期待互联网科技 成都玖崟互联网科技有限公司乐商圈怎么样 昭通云南众福互联网科技有限公司 汽车互联网创新科技园 中国科技创新与世界互联网大会 允成互联网科技有限公司融资 河南住房之家互联网科技 佛山市拉法互联网科技有限公司 爱医互联网络科技 互联网科技如何创业 科技赋能视角下互联网保险发展 济南有互联网科技公司吗 南通创西澳互联网科技有限公司 张召忠谈中国互联网科技 上海万顺科技互联网有限公司招聘 广州三三互联网科技有限公司 互联网科技工作委员会毛军 郑州华宇互联网科技 互联网科技网站 丰台科技园 互联网公司 互联网科技创新企业排名 深圳市运趣互联网科技有限公司 互联网公司科技股 深圳市优智互联网科技有限公司 电子科技大学互联网创业大赛 互联网领先科技宣传片
0