2016-10-07 7 views
5

現在、Hiveでいくつかのデータ探索を行っており、以下の動作を説明することはできません。フィールドmaster_idを持つテーブル(mytableという名前)があるとします。HIVE select count(*)non nullはselect count(*)よりも高い値を返します

は、私は、行の数を数えるとき、私は非ヌルMASTER_IDと行の数をカウントしたい場合は、私は

select count(*) as c from mytable 
c 
1129563 

を取得し、私は

select count(*) as c from mytable where master_id is not null 
c 
1134041 

また、より多くの数を取得しますmaster_idは決してnullではないようです。

select count(*) as c from mytable where master_id is null 
c 
0 

whereステートメントを追加すると最終的に行の数を増やす方法を説明できません。誰もこの行動を説明するヒントはありますか?

おかげ

+0

何そのテーブルのスキーマがどのように見えるのでしょうか? – Kusalananda

+0

テーブルスキーマ – Beginner

答えて

5

はほとんどおそらく、このパラメータの統計を使用しているところのないクエリが設定されている:

set hive.compute.query.using.stats=true; 

は偽に設定して、再度実行してください。

また、テーブルの統計を計算することもできます。 また、それが自動的に上書き保存INSERT時の統計情報を収集することが可能ですANALYZE TABLE SYNTAX

を参照してください:

set hive.stats.autogather=true; 
+0

ありがとうございます。実際、hive.compute.query.using.statsをfalseに設定すると、両方のカウントが一致します。 –

+0

これは分析するのに新しいことです..良いもの。 –