Hive 查詢計數差異:非空計數大於總計數
在 Hive 中,我們觀察到一個關於行計數計算的有趣現象。假設有一個名為 mytable 的表,其中包含一個名為 master_id 的欄位。執行以下查詢時,檢索到的總行數為 1,129,563:
<code class="language-sql">SELECT COUNT(*) AS c FROM mytable;</code>
但是,當查詢非空 master_id 值的行數時,計數增加到 1,134,041:
<code class="language-sql">SELECT COUNT(*) AS c FROM mytable WHERE master_id IS NOT NULL;</code>
這種差異出現的原因是,預設情況下,不帶 WHERE 子句的查詢可能會使用統計資訊來估計行數。若要解決此問題,可以將參數 hive.compute.query.using.stats
設為 false 以停用統計估計。
或者,可以使用 ANALYZE TABLE
語句明確計算表統計信息,或者將 hive.stats.autogather
設為 true,以便在通過 INSERT OVERWRITE 操作批量導入數據時收集統計信息。這將確保查詢結果準確一致,避免類似這種情況的意外結果。
以上是為什麼我的 Hive COUNT(*) 查詢顯示的行數比非空計數查詢少?的詳細內容。更多資訊請關注PHP中文網其他相關文章!