在 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 等函数。

相关推荐
BYSJMG1 小时前
计算机毕设选题做什么好?基于大数据的用户健身行为数据分析与可视化系统,Hadoop+Spark处理
大数据·人工智能·hadoop·数据分析·spark·课程设计
ha_lydms12 小时前
HDFS 简介
大数据·hadoop·hdfs·yarn·调度·aliyun·计算
2601_9622980914 小时前
零基础学大数据分析全栈
hadoop·python·spark·实战·大数据分析
lhldsg20 小时前
幼儿托管系统开发实战指南:从需求分析到架构设计全流程解析
数据库·数据仓库·需求分析
ha_lydms1 天前
HDFS的读写流程
大数据·hadoop·hdfs·mapreduce·yarn·maxcompute·odps
BYSJMG2 天前
大数据毕业设计选题推荐:基于大数据的全球气温历史演变分析与可视化,用Hadoop+Spark处理
大数据·hadoop·分布式·信息可视化·spark·kmeans·课程设计
fastjson_2 天前
Hive 自定义函数
数据仓库·hive·hadoop
Gent_倪2 天前
MySQL 与 Hive 语法异同点详解
数据库·hive·mysql
lhldsg3 天前
智慧场馆解决方案软件开发实战:从需求分析到落地部署全流程
数据库·数据仓库·需求分析
迈巴赫车主3 天前
Doris简介
大数据·数据仓库·doris