Hive 記null帶來的坑

2022-08-22 00:03:17 字數 725 閱讀 7180

在hive或者impala中,null值表示這個字段值為空值(沒有值),一般情況下我們把資料從原始系統抽取到數倉ods層的時候,都要做空值處理,比方說用nvl()函式把空值置為0或者空字串等等,如果不處理,後續可能給開發帶來坑。下面以乙個具體的例子說明筆者在開發的時候,由於疏忽大意,沒對空值進行處理,導致的問題。

具體就是null值在和任何值作比較的時候,都認為不成立。

比方說,有個student表,有個字段為選修科目,為string型別,正常情況,有些學生,有選修課,有些學生沒有選選修課,所有這個字段存在null值。

現在我們要把選修課不是為管理學的資料篩選出來。

筆者的第一反應就是

select    *   from   student     where   subject !='管理學';

或者select  *    from    student   where   subject  not  in  ('管理學')

這種情況查詢出來的結果會把選修科目為管理學的資料篩選掉,

但是同時也會把選修科目為null的資料篩選掉。原因是因為null值和任何值比較時預設認為不成立。

但是我們的本意是要保留這一部分資料的。

所以顯然這種查詢出來的結果是錯的,這個時候我們就要對null值做特殊處理,比方說全部置為空字串。或者置為0

select   *    from    student    where    nvl(subject,'') !='管理學'

hive中的NULL分析

hive中有種假null,它看起來和null一摸一樣,但是實際卻不是null。空值null在底層預設是用 n 來儲存的,hive中 是轉義字元,需要對 進行一次轉義,所以變成 n 如果實際想儲存 n 那麼實際查詢出來的也是null而不是 n 修改預設的null表示 alter table test ...

hive 中的NULL測試

hive 中的null測試 這個文章和我要表達的意思基本一樣。alter table test123 set serdeproperties serialization.null.format 這個語句會把hive中null的底層儲存改變 在未指定以上語句時候 string 型別的null 和int...

HIVE踩坑 NULL和空字串處理

這裡我們針對在hive中遇到的null和空字串問題進行簡單 避免踩坑!簡單探索 首先新建一張測試表test 01,用作後續測試。create table ifnot exists test 01 id int,name string,age int,score float row format de...