在 Hive 中NULL的理解

在 Hive 中,NULL 是一个特殊的值,表示"未知"或"缺失" 。任何与 NULL 的比较操作(如 =, >, <, >=, <=, <>)都会返回 NULL,而不是 TRUE 或 FALSE。


1. NULL 的比较规则

在 Hive(以及大多数 SQL 数据库)中,NULL 的比较遵循 三值逻辑(Three-Valued Logic):

  • TRUE
  • FALSE
  • UNKNOWN(即 NULL)

任何与 NULL 的比较结果都是 UNKNOWN(即 NULL)。


2. 具体示例

假设有一个表 test:

value
5
NULL
3
2.1 NULL > 1 返回什么?
sql 复制代码
SELECT value, value > 1 AS result FROM test;

结果:

value result
5 true
NULL NULL
3 true
  • NULL > 1 → NULL(未知)
  • NULL < 1 → NULL
  • NULL = 1 → NULL
  • NULL <> 1 → NULL
2.2 NULL = NULL 返回什么?
sql 复制代码
SELECT NULL = NULL AS result;

结果: NULL(不是 true!)

  • 在 SQL 中,NULL 不等于任何值,包括它自己。
  • 要判断两个值是否都为 NULL,必须用 IS NULL。
2.3 IS NULL 和 IS NOT NULL
sql 复制代码
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 行为

sql 复制代码
SELECT * FROM test WHERE value > 1;

结果:

value
5
3
  • NULL 被过滤掉了!因为 NULL > 1 返回 NULL,而 WHERE 只保留 TRUE 的行。

如果你想保留 NULL,必须显式判断:

sql 复制代码
SELECT * FROM test WHERE value > 1 OR value IS NULL;

4. NULL 的逻辑运算

  • TRUE AND NULL → NULL
  • FALSE AND NULL → FALSE
  • TRUE OR NULL → TRUE
  • FALSE OR NULL → NULL
  • NOT NULL → NULL

5. 如何正确处理 NULL

5.1 使用 IS NULL / IS NOT NULL
sql 复制代码
SELECT * FROM test WHERE value IS NULL;
5.2 使用 COALESCE 提供默认值
sql 复制代码
SELECT COALESCE(value, 0) AS safe_value FROM test;
5.3 使用 NVL(Hive 特有)
sql 复制代码
SELECT NVL(value, 0) AS safe_value FROM test;
5.4 使用 CASE WHEN
sql 复制代码
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 等函数。

相关推荐
geovindu15 小时前
SQL Data Sampling and Approximation Techniques using postgreSQL 18
大数据·数据库·数据仓库·sql·postgresql·数据库开发·数据库架构
skywalk816317 小时前
hive —— 多机 AI Agent 协同的任务总线:分布式,多节点同时运行,保障不会宕机
人工智能·hive·分布式
程序员梅雨1 天前
【从零开始学习数据仓库 | 第一篇】:维度建模理论
大数据·数据仓库·学习·阿里云·数据分析
棣廷2 天前
初识数据仓库——数仓分层到DataX数据采集
数据仓库
棣廷2 天前
初识Hive(2)
数据仓库·hive·hadoop
skywalk81632 天前
deepseek对skywalk163/hive 和hivecommons/hive 两个多机AI Agent任务调度项目的对比
人工智能·hive·agent
father_12272 天前
【ambari管理下hdp2.6.5升级hive1.2.1-2.1.0-2.3.3】
hive·hadoop·ambari
geovindu3 天前
Pivoting and Unpivoting Data in SQL using postgreSQL 18
大数据·数据库·数据仓库·sql·postgresql·数据库开发·数据库架构
数据库小学妹3 天前
OLAP数据库怎么选?看清OLTP、数仓、湖仓边界
数据仓库·mpp·列式存储·联机分析处理·数据库选型·olap数据库