2012-10-22 24 views
6

如果在Hive表中使用映射類型,我如何測試空條目(鍵存在,但值爲空)?Hive:如何測試和查找空映射條目?

隨着表:

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

我有一個看起來像這樣的幾個項目:

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

如果我運行查詢:

SELECT * FROM test1的其中m [ 「c」]爲空;

由於表達式每次計算結果爲真,我將返回兩行。

如何測試鍵之間是否存在且值爲空?

+0

所以是的,我加了我自己的答案,但尋找反饋和/或其他解決方案 – libjack

回答

7

我拿出2個解決方案

要查找地圖實際上包含特定的鍵行和其爲空:

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

要找到任何的鍵,值爲null:

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