13

如果在 Hive 表中使用映射类型,我如何测试空条目(键存在,但值为空)?

带表:

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

我有一些看起来像这样的条目:

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

如果我运行查询:

select * from test1 其中 m["c"] 为空;

我将取回两行,因为表达式每次都评估为真。

如何在键存在和值为空之间进行测试?

4

1 回答 1

18

我想出了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;
于 2012-10-22T15:54:33.263 回答