Hive-Anzahl-Ausnahme: WHERE-Klausel führt zu einer Erhöhung der Anzahl
Während der Hive-Datenerkundung wurde ein seltsames Phänomen beobachtet. Beim Zählen mit der einfachen Anweisung select count(*) as c from mytable
beträgt das Ergebnis 1.129.563. Durch das Hinzufügen des Filters select count(*) as c from mytable where master_id is not null
wurde die Anzahl jedoch unerwartet auf 1.134.041 erhöht.
Weitere Untersuchungen ergaben, dass die Spalte master_id
immer Werte ungleich Null enthielt. Dies führt zu einer Frage: Wie lässt sich erklären, dass die Implementierung der Nullwert-Ausschlussbedingung tatsächlich die Anzahl der Zeilen erhöht?
Mögliche Erklärung: Bienenstockstatistik
Die Antwort liegt im Verständnis der Auswirkungen von Hive-Statistiken. Standardmäßig verwendet Hive Statistiken, um Abfragen zu optimieren und die Leistung zu verbessern. Beim Ausführen einer select count(*) as c from mytable
-Abfrage (ohne Filterung) kann Hive zur Schätzung der Anzahl auf gespeicherte Statistiken zurückgreifen. Allerdings sind diese Statistiken nicht immer korrekt oder aktuell.
In diesem Fall kann die Statistik darauf hinweisen, dass es in der Spalte master_id
viele Zeilen gibt, die Nullwerte enthalten. Beim Hinzufügen des Filters master_id is not null
hat Hive die Statistiken neu ausgewertet und festgestellt, dass die meisten Zeilen Nicht-Null-Werte enthielten. Dies führt zu einer genaueren Zählung und eliminiert spürbare Abweichungen.
Methoden zur Lösung des Problems
Um eine genaue Zählung zu erhalten, insbesondere wenn Sie mit Tabellen arbeiten, die erheblich geändert wurden oder kürzlich nicht analysiert wurden, wird Folgendes empfohlen:
hive.compute.query.using.stats=false
fest, um zu verhindern, dass Hive Statistiken verwendet, und erzwingen Sie einen vollständigen Tabellenscan. ANALYZE TABLE
, um Tabellenstatistiken manuell zu aktualisieren und deren Genauigkeit sicherzustellen. hive.stats.autogather=true
so ein, dass bei Datenvorgängen wie INSERT OVERWRITE
automatisch Statistiken erfasst werden. Das obige ist der detaillierte Inhalt vonWarum erhöht das Hinzufügen einer „WHERE master_id IS NOT NULL'-Klausel den „COUNT(*)'-Wert in Hive?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!