2012-10-22 20 views
6

Harita türünü bir Hive tablosunda kullanıyorsanız, boş bir giriş için nasıl test yapabilirim (anahtar var, ancak değer boş değil)? tablo ileKovan: Boş harita girişleri nasıl test edilir ve bulunulur?

:

test1 (id string, m map<string, string>) 

Ben şuna benzer bir kaç girdileri vardır:

id1 {"b":"B","c":null} 
id2 {"b":"B"} 

Ben sorguyu çalıştırırsanız:

select * from test1 m [ "c"] boştur;

İfade her defasında doğru değerlendirildiğinden, her iki satırı da geri alacağım.

Anahtar varlıklar arasında nasıl sınama yapabilirim ve değer null mı?

+0

evet, kendi yanıtımı ekledim, ancak geri bildirim ve/veya diğer çözümler arıyorum – libjack

cevap

7

Ben haritanın belirli bir anahtarı içeren satırları bulmak için 2 çözümleri

ile geldim ve onun null: Değer boş olduğu

select * from test1 where array_contains(map_keys(m),'c') and m["c"] is null; 

herhangi bir tuşa bulmak için:

select id,k from test1 LATERAL VIEW explode(m) et as k,v where v is null; 
İlgili konular