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中文网其他相关文章!