在 Hive 中NULL的理解

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


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 > 1NULL(未知)
  • NULL < 1NULL
  • NULL = 1NULL
  • NULL <> 1NULL
2.2 NULL = NULL 返回什么?
sql 复制代码
SELECT NULL = NULL AS result;

结果: NULL(不是 true!)

  • 在 SQL 中,NULL 不等于任何值,包括它自己。
  • 要判断两个值是否都为 NULL,必须用 IS NULL
2.3 IS NULLIS 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 NULLNULL
  • FALSE AND NULLFALSE
  • TRUE OR NULLTRUE
  • FALSE OR NULLNULL
  • NOT NULLNULL

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 判断空值。

如需处理复杂空值逻辑,建议结合 COALESCECASE WHEN 等函数。

相关推荐
大鳥20 小时前
数据仓库知识体系
hive·hadoop
计算机毕业编程指导师21 小时前
大数据可视化毕设:Hadoop+Spark交通分析系统从零到上线 毕业设计 选题推荐 毕设选题 数据分析 机器学习 数据挖掘
大数据·hadoop·python·计算机·spark·毕业设计·城市交通
计算机毕业编程指导师21 小时前
【计算机毕设选题】基于Spark的车辆排放分析:2026年热门大数据项目 毕业设计 选题推荐 毕设选题 数据分析 机器学习 数据挖掘
大数据·hadoop·python·计算机·spark·毕业设计·车辆排放
talle202121 小时前
Hive | 行列转换
数据仓库·hive·hadoop
Gain_chance1 天前
27-学习笔记尚硅谷数仓搭建-数据仓库DWD层介绍及其事务表(行为)相关概念
大数据·数据仓库·笔记·学习
talle20211 天前
Hive | json数据处理
hive·hadoop·json
CTO Plus技术服务中1 天前
Hive开发与运维教程
数据仓库·hive·hadoop
Gain_chance1 天前
28-学习笔记尚硅谷数仓搭建-DWD层交易域加购事务事实表建表语句及详细分析
数据仓库·hive·笔记·学习·datagrip
小邓睡不饱耶1 天前
Hive 实战:数据仓库建模、SQL 进阶与企业级案例
数据仓库·hive·sql
ha_lydms1 天前
Hadoop 架构
大数据·hadoop·hdfs·架构·mapreduce·yarn·数据处理