2017-10-12 1 views
1

私は10個の奇数列を持つテーブルを持っています。そのうちの1つは 'Status'です。ヌル値を持つ列にはin句がありません

私はステータスが却下されていないすべての行をフェッチしたかったので、私はハイブで次の問合せを書いた:ハイブは私にステータスがNullだった行を返すされていませんが

select * from table1 where status <> 'Rejected' 

を。クエリを

に変更しました
select * from table1 where status <> 'Rejected' or status is Null 

しかし、なぜこれが起こっているのかを理解するためのドキュメントは見つかりません。

誰か助けてもらえますか?

+1

これは 'NULL'の働きです。これは、すべてのデータベースの 'NULL'値を記述するドキュメントに含まれていなければなりません。 –

答えて

0

ハイブは比較演算子NULLを実装しています。だから、あなたが行うことができます:あなたの質問については

select * 
from table1 
where not status <=> 'Rejected' ; 

を、それがNULLがデータベースに何を意味するのかについて、かなり基本的な質問です。それは「不明」を意味するものではなく、「未知」を意味します。オペランドがNULLの場合、ほとんどの比較演算はNULLを返します。NULLの値を扱うように設計されたオペランド(<=>,is not nullis nullなど)は例外です。

0

nullは値ではありません。その値はありません。値の文脈でそれを使用しようとすると、結果は "unkonwn"になります。あなたはこのように考えることができます - 「未知(=ヌル)の値は「拒否」とは異なりますか?わかりません。

したがって、具体的にはis [not]演算子で処理する必要があります。共有した2番目のwhere句は、「拒否された」という値を持たないすべてのステータスと考えることができます。

関連する問題