Hive中NULL的含義
阿新 • • 發佈:2019-02-15
在Hive中,NULL表示的是異常,與null不同,檔案中的null在Hive中被認為字串,如果對應的欄位型別是字元類的,如string,則將其視為一個普通的字串,而對於資料類的,則若資料本身是null,則由於無法轉換為數值,則會顯示NULL。
此外,Hive無法實現對NULL資料的過濾。
Hive為讀時模式,其在讀取時將儲存的實際值轉化為schema中定義的資料型別,當轉換失敗時對應值顯示為NULL。那麼考慮是否可以通過在where子句中對NULL值過濾呢,經過驗證答案是否定的,基本可以這麼認為,對於讀取時無法正確轉換的值(select時顯示為NULL)的值,是不會參與where字句的運算的。
場景描述
如下所示,在Hive中表中內容以及相應的檔案內容如下所示:
各欄位型別在欄位名稱中體現,可以看出,對於char型別將空視作普通的字元展示,對於timestamp型別為空的,則由於不能正常轉換,則顯示為NULL,同理boolean型別的亦是如此。
驗證步驟
Ø 以boolean型別的為例,可以在where子句中過濾掉true和/或false的,檢視是否可以省下NULL的:
可以看出NUUL行的並未參與where過濾。
Ø 以timestamp為例,我們知道後臺是缺失值的,那麼是否可以篩選出來呢?
可以看出是無法過濾得到的。
Ø 但char對於空的值是可以過濾得到的,如下所示: