Hive: как проверить и найти записи нулевой карты?

Если используется тип карты в таблице улья, как я могу проверить нулевую запись (ключ существует, но значение равно null)?

стол:

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

у меня есть несколько записей, которые выглядят так:

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

Если я выполняю запрос:

выберите * из test1, где m ["c"] равно null;

Я верну обе строки, так как выражение каждый раз оценивает true.

Как я могу проверить между ключом существует и значение значение null?

1 ответов


Я придумал 2 решения

, чтобы найти строки, где карта фактически содержит определенный ключ и его значение null:

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;