我有一个包含10个奇数列的表格,其中一个是'状态'。
我想获取Status未被拒绝的所有行,所以我在Hive上写了以下查询:
select * from table1 where status <> 'Rejected'
然而,Hive并没有返回Status为Null的行。我将查询更改为
select * from table1 where status <> 'Rejected' or status is Null
但是我无法找到任何文档来理解为什么会这样。
有人可以帮帮我吗?
答案 0 :(得分:0)
null
不是价值,而是缺乏价值。每当您尝试在值的上下文中使用它时,结果将是“unkonwn”。你可以这样思考 - “是一个与'拒绝'不同的未知(= null)值吗?我们不知道。”
因此,您需要使用is [not]
运算符专门处理它。您可以将您共享的第二个where
子句视为“所有未知具有'拒绝'值的状态的所有状态。”
答案 1 :(得分:0)
Hive实现了NULL
- 安全比较运算符。所以你可以这样做:
select *
from table1
where not status <=> 'Rejected' ;
关于你的问题,关于NULL
在数据库中的含义,这是一个非常基本的问题。它并不意味着“失踪”,它意味着“未知”。当任一操作数为NULL
时,几乎所有比较操作都返回NULL
- 例外是特定设计的操作数(例如<=>
,is not null
和is null
)处理NULL
值。