一文詳解在Hive中NULL的理解
前言
在 Hive 中,NULL 是一個特殊的值,表示“未知”或“缺失”。任何與 NULL 的比較操作(如 =, >, <, >=, <=, <>)都會返回 NULL,而不是 TRUE 或 FALSE。
1.NULL 的比較規(guī)則
在 Hive(以及大多數(shù) SQL 數(shù)據(jù)庫)中,NULL 的比較遵循 三值邏輯(Three-Valued Logic):
TRUEFALSEUNKNOWN(即NULL)
任何與 NULL 的比較結(jié)果都是 UNKNOWN(即 NULL)。
2.具體示例
假設(shè)有一個表 test:
| value |
|---|
| 5 |
| NULL |
| 3 |
2.1NULL > 1返回什么?
SELECT value, value > 1 AS result FROM test;
結(jié)果:
| 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;
結(jié)果: NULL(不是 true?。?/p>
- 在 SQL 中,
NULL不等于任何值,包括它自己。 - 要判斷兩個值是否都為
NULL,必須用IS NULL。
2.3IS NULL和IS NOT NULL
SELECT value, value IS NULL AS is_null FROM test;
結(jié)果:
| value | is_null |
|---|---|
| 5 | false |
| NULL | true |
| 3 | false |
IS NULL是唯一能正確判斷NULL的操作。
3.WHERE 子句中的 NULL 行為
SELECT * FROM test WHERE value > 1;
結(jié)果:
| 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.總結(jié)
| 操作 | 結(jié)果 |
|---|---|
NULL > 1 | NULL |
NULL = NULL | NULL |
value IS NULL | TRUE/FALSE |
WHERE value > 1 | 過濾掉 NULL |
COALESCE(value, default) | 提供默認值 |
核心原則:
NULL不等于任何值,包括它自己。- 任何與
NULL的比較都返回NULL。 - 必須用
IS NULL判斷空值。
如需處理復(fù)雜空值邏輯,建議結(jié)合 COALESCE、CASE WHEN 等函數(shù)。
到此這篇關(guān)于在Hive中NULL理解的文章就介紹到這了,更多相關(guān)Hive中NULL理解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
檢查數(shù)據(jù)庫服務(wù)器是否正在運行的常見方法小結(jié)
在日常的數(shù)據(jù)庫操作和維護中,確保數(shù)據(jù)庫服務(wù)器正常運行是至關(guān)重要的,本文整理了幾種常見的檢查數(shù)據(jù)庫服務(wù)器是否正在運行的方法,需要的小伙伴可以了解下2025-04-04
Navicat?Premium12進行數(shù)據(jù)庫定期自動備份的方法步驟
本文主要介紹了Navicat?Premium?12進行數(shù)據(jù)庫定期自動備份,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02
navicat導(dǎo)入excel文件的步驟以及可能碰到的問題
本文介紹將excel導(dǎo)入到mysql數(shù)據(jù)庫的方法,相對來說比較簡單,但也可能會碰到一些小問題,在這里做一個小的總結(jié),這里使用到的工具包括navicat,mysql數(shù)據(jù)庫以及excel,需要的朋友可以參考下2024-07-07
Select data from an Excel sheet in MSSQL
Select data from an Excel sheet in MSSQL...2007-06-06

