在使用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值。
這裏一定要謹記。