如果在Hive表中使用映射类型,如何测试空条目(键存在,但值为null)?
使用表格:
test1 (id string, m map<string, string>)
我有一些看起来像这样的条目:
id1 {"b":"B","c":null}
id2 {"b":"B"}
如果我运行查询:
从test1中选择*,其中m [“c”]为空;
我将返回两行,因为每次表达式的计算结果为真。
如何在key exists和value之间测试是否为null?
答案 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;