1. 程式人生 > >hive中使用is null和is not null問題

hive中使用is null和is not null問題

   在使用HQL時如果有空值喜歡追隨SQL99的規範使用IS NULL 和IS NOT NULL來判斷,這個是一般的思維習慣。但是在hive中跟傳統的資料庫不一樣的地方在於NULL的解讀。

在傳統資料庫中欄位沒有值或者為空即表示為NULL,但是在hive中預設的NULL值是\N,對沒錯,就是\N。在hive中會把文字的\N解析為NULL。在使用IS NULL 或者IS NOT NULL時會過濾資料。

如果想延續傳統資料庫中對於空值為NULL,可以通過alter語句來修改hive表的資訊,保證解析時是按照空值來解析NULL值。語句如下:

alter table ljn005 SETSERDEPROPERTIES('serialization.null.format' ='');

這樣就可以修改預設的NULL值的定義了。比如這裡定義alter table ljn005 SETSERDEPROPERTIES('serialization.null.format' ='abc'); 則以後出現abchive都會把這個解析為NULL值。

這裡一定要謹記。