1. 程式人生 > >hive--解決使用not in之後返回資料為空的問題

hive--解決使用not in之後返回資料為空的問題

【問題描述】

當使用了not in 之後,發現查詢返回的資料為空。

舉例:

select *
from ht_insurance_data
where c_insurance_record_description not in ('基數補繳','滯納金補收','補收利息(複利)','補收記錄','欠款補繳','差額調整','個人繳利息'
,'單位繳利息','差額調整','繳費基數調整補收','差額補收記錄','繳費工資調整','統一繳費基數補差','退收記錄','補收(核入月結算)','工齡補繳','欠繳補收')

我們的目的是刪除部分不符合的描述,但是,結果會發現,查詢的結果為空,但明明有些描述是不在刪除範圍內的啊?

【原因分析】

檢視c_insurance_record_description這個欄位就會發現,裡面含有空值(null),問題可能就在此。在hive中,null的含義是“unknown”,它無法與我們羅列的那些描述相比較,從而導致了問題的出現。

【解決辦法】

在限制非空的情況下使用not in 操作

select *
from ht_insurance_data
where ((c_insurance_record_description is not null and c_insurance_record_description not in ('基數補繳','滯納金補收','補收利息(複利)','補收記錄','欠款補繳','差額調整','個人繳利息','單位繳利息','繳費基數調整補收','差額補收記錄','繳費工資調整','統一繳費基數補差','退收記錄','補收(核入月結算)','工齡補繳','欠繳補收'))
       or c_insurance_record_description is null)

解決問題!

【參考】

(僅供個人學習,不負責任~~~)