hive--解決使用not in之後返回資料為空的問題
阿新 • • 發佈:2019-01-23
【問題描述】
當使用了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)
解決問題!
【參考】
(僅供個人學習,不負責任~~~)