2016-10-07 1 views
5

Ich mache gerade einige Datenexploration mit Hive und kann das folgende Verhalten nicht erklären. Angenommen, ich habe eine Tabelle (namens mytable) mit einem Feld master_id.HIVE select count (*) Nicht null gibt einen höheren Wert zurück als Select count (*)

Wenn ich die Anzahl der Zeilenanzahl ich

select count(*) as c from mytable 
c 
1129563 

Wenn ich die Anzahl der Zeilen mit einem nicht null master_id zählen möchten, erhalte ich eine höhere Anzahl

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

Zusätzlich wird die master_id scheint niemals null zu sein.

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

Ich kann nicht erklären, wie das Hinzufügen einer where-Anweisung die Anzahl der Zeilen erhöhen kann. Hat jemand einen Hinweis, dieses Verhalten zu erklären?

Dank

+0

Was ist das Schema der Tabelle aussehen? – Kusalananda

+0

bieten Sie Ihr Tabellenschema – Beginner

Antwort

5

meisten wahrscheinlich die Abfrage, ohne wo Statistiken zu verwenden, da dieser Parameter gesetzt:

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

Try es falsch zu setzen und wieder auszuführen.

Alternativ können Sie Statistiken für die Tabelle berechnen. Siehe ANALYZE TABLE SYNTAX

Auch ist es möglich, Statistiken während INSERT sammeln ÜBERSCHR automatisch:

set hive.stats.autogather=true; 
+0

Vielen Dank. In der Tat, wenn ich hive.compute.query.using.stats auf false setze, stimmen beide Zähler überein. –

+0

Dies ist etwas Neues zu analysieren .. Gute. –