前言
在 hive 中,null 是一个特殊的值,表示“未知”或“缺失”。任何与 null 的比较操作(如 =, >, <, >=, <=, <>)都会返回 null,而不是 true 或 false。
1.null 的比较规则
在 hive(以及大多数 sql 数据库)中,null 的比较遵循 三值逻辑(three-valued logic):
truefalseunknown(即null)
任何与 null 的比较结果都是 unknown(即 null)。
2.具体示例
假设有一个表 test:
| value |
|---|
| 5 |
| null |
| 3 |
2.1null > 1返回什么?
select value, value > 1 as result from test;
结果:
| value | result |
|---|---|
| 5 | true |
| null | null |
| 3 | true |
null > 1→null(未知)null < 1→nullnull = 1→nullnull <> 1→null
2.2null = null返回什么?
select null = null as result;
结果: null(不是 true!)
- 在 sql 中,
null不等于任何值,包括它自己。 - 要判断两个值是否都为
null,必须用is null。
2.3is null和is not null
select value, value is null as is_null from test;
结果:
| value | is_null |
|---|---|
| 5 | false |
| null | true |
| 3 | false |
is null是唯一能正确判断null的操作。
3.where 子句中的 null 行为
select * from test where value > 1;
结果:
| value |
|---|
| 5 |
| 3 |
null被过滤掉了!因为null > 1返回null,而where只保留true的行。
如果你想保留 null,必须显式判断:
select * from test where value > 1 or value is null;
4.null 的逻辑运算
true and null→nullfalse and null→falsetrue or null→truefalse or null→nullnot null→null
5.如何正确处理 null
5.1 使用is null/is not null
select * from test where value is null;
5.2 使用coalesce提供默认值
select coalesce(value, 0) as safe_value from test;
5.3 使用nvl(hive 特有)
select nvl(value, 0) as safe_value from test;
5.4 使用case when
select
case
when value is null then 'missing'
when value > 1 then 'large'
else 'small'
end as category
from test;
6.总结
| 操作 | 结果 |
|---|---|
null > 1 | null |
null = null | null |
value is null | true/false |
where value > 1 | 过滤掉 null |
coalesce(value, default) | 提供默认值 |
核心原则:
null不等于任何值,包括它自己。- 任何与
null的比较都返回null。 - 必须用
is null判断空值。
如需处理复杂空值逻辑,建议结合 coalesce、case when 等函数。
到此这篇关于在hive中null理解的文章就介绍到这了,更多相关hive中null理解内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论