13

Hiveテーブルでマップタイプを使用している場合、nullエントリをテストするにはどうすればよいですか(キーは存在しますが、値はnullです)。

テーブル付き:

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

次のようなエントリがいくつかあります。

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

クエリを実行した場合:

select * from test1 where m ["c"] null;

式は毎回trueと評価されるため、両方の行を取得します。

キーが存在し、値がnullであるかどうかをテストするにはどうすればよいですか?

4

1 に答える 1

18

私は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;
于 2012-10-22T15:54:33.263 に答える