2012-10-22 1 views
6

Hiveテーブルのマップタイプを使用している場合、nullエントリ(キーは存在しますが、値はnull)をテストするにはどうすればよいですか?表とハイブ:ヌルマップエントリをテストして見つける方法

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

私は次のようになり、いくつかのエントリがあります:私は、クエリを実行する場合

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

を:

は[TEST1メートルから選択* "c"]はnullです。

私は、式が毎回真と評価されるので、両方の行を戻します。

key existsとvalueの間でどのようにテストできますか?

+0

はい、自分の回答を追加しましたが、フィードバックやその他の解決策を探しています – libjack

答えて

7

私はマップが実際に特定のキーが含まれており、そのがヌルである行を見つけるために2つのソリューション

を作ってみた:値がnullである任意のキーを見つけるには

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

を:

select id,k from test1 LATERAL VIEW explode(m) et as k,v where v is null; 
関連する問題