一文详解在Hive中NULL的理解

 更新时间:2025年11月21日 11:19:05   作者:龙大.  
在Hive中,NULL表示的是异常,这篇文章主要介绍了在Hive中NULL理解的相关资料,文中通过代码介绍的非常详细,对大家学习或者使用Hive具有一定的参考借鉴价值,需要的朋友可以参考下

前言

在 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.1NULL > 1返回什么?

SELECT value, value > 1 AS result FROM test;

结果:

valueresult
5true
NULLNULL
3true
  • NULL > 1NULL(未知)
  • NULL < 1NULL
  • NULL = 1NULL
  • NULL <> 1NULL

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;

结果:

valueis_null
5false
NULLtrue
3false
  • 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 NULLNULL
  • FALSE AND NULLFALSE
  • TRUE OR NULLTRUE
  • FALSE OR NULLNULL
  • NOT NULLNULL

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 > 1NULL
NULL = NULLNULL
value IS NULLTRUE/FALSE
WHERE value > 1过滤掉 NULL
COALESCE(value, default)提供默认值

核心原则

  • NULL 不等于任何值,包括它自己。
  • 任何与 NULL 的比较都返回 NULL
  • 必须用 IS NULL 判断空值。

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

到此这篇关于在Hive中NULL理解的文章就介绍到这了,更多相关Hive中NULL理解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • 检查数据库服务器是否正在运行的常见方法小结

    检查数据库服务器是否正在运行的常见方法小结

    在日常的数据库操作和维护中,确保数据库服务器正常运行是至关重要的,本文整理了几种常见的检查数据库服务器是否正在运行的方法,需要的小伙伴可以了解下
    2025-04-04
  • 数据库为何要建立索引的原因说明

    数据库为何要建立索引的原因说明

    数据库索引是为了增加查询速度而对表字段附加的一种标识。见过很多人机械的理解索引的概念,认为增加索引只有好处没有坏处。
    2011-06-06
  • 有效防止SQL注入的5种方法总结

    有效防止SQL注入的5种方法总结

    SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。下面这篇文章主要给大家介绍了关于防止SQL注入的5种方法,教大家有效的防止sql注入,需要的朋友可以参考学习。
    2017-03-03
  • 交互分布式系统下如何生成唯一序列

    交互分布式系统下如何生成唯一序列

    在分布式系统中,由于涉及到多个不同业务module的交互,以及高并发的场景。我们需要系统能够生成一个跨业务module的全网唯一序列号,来保证我们业务操作的独立性和唯一性
    2022-01-01
  • Dbeaver基本使用图文详解

    Dbeaver基本使用图文详解

    dbeaver是一款很强大的数据库连接工具,本人之前使用的是navicat,挺好用的,只不过每次激活都要整半天,然后看到了dbeaver这款工具,本着尝试的心态,体验了下,真香
    2021-11-11
  • Redis和Memcache的区别总结

    Redis和Memcache的区别总结

    这篇文章主要介绍了Redis和Memcache的区别,用三个总结来说明Redis和Memcache的区别,需要的朋友可以参考下
    2014-05-05
  • 当数据库变慢时的解决方法

    当数据库变慢时的解决方法

    当数据库变慢时,我们应如何入手,下面的解决方法。
    2009-04-04
  • Navicat Premium12进行数据库定期自动备份的方法步骤

    Navicat Premium12进行数据库定期自动备份的方法步骤

    本文主要介绍了Navicat Premium 12进行数据库定期自动备份,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • navicat导入excel文件的步骤以及可能碰到的问题

    navicat导入excel文件的步骤以及可能碰到的问题

    本文介绍将excel导入到mysql数据库的方法,相对来说比较简单,但也可能会碰到一些小问题,在这里做一个小的总结,这里使用到的工具包括navicat,mysql数据库以及excel,需要的朋友可以参考下
    2024-07-07
  • Select data from an Excel sheet in MSSQL

    Select data from an Excel sheet in MSSQL

    Select data from an Excel sheet in MSSQL...
    2007-06-06

最新评论