Hive:如何测试和查找空映射条目?

时间:2012-10-22 15:52:02

标签: hive

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

使用表格:

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

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

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

如果我运行查询:

  

从test1中选择*,其中m [“c”]为空;

我将返回两行,因为每次表达式的计算结果为真。

如何在key exists和value之间测试是否为null?

1 个答案:

答案 0 :(得分:12)

我想出了两个解决方案

要查找地图实际包含特定键的行,并且该行为空:

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;