Hive SELECT col,COUNT(*)不匹配

时间:2017-10-23 17:02:56

标签: hadoop hive hiveql

首先我要说的是,我对Hive很新,所以我不确定需要哪些信息来帮助我。请告诉我哪些信息有用。此外,虽然我通常创建一个小数据集来重新创建问题,但我认为这个问题与我的数据集的规模有关,因为我似乎无法在较小的数据集上重新创建问题。如果您有建议让这个更容易回答,请告诉我。

好的,现在已经不在了,这是我的问题。我有一个庞大的数据集,按月划分,每月约有5亿行。我有一个带有ID号的列(我称之为idcol),我想仔细研究几个例子,其中有大量的重复ID和非常低的数字。所以,我用过这个:

SELECT idcol, COUNT(*) FROM table WHERE month = 7 GROUP BY idcol LIMIT 10;

得到了:

000005185884381 13
000035323848000 24
000017027256315 531
000010121767109 54
000039844553332 3
000013731352481 309
000024387407996 3
000028461234451 67
000016564844672 1
000032933040806 17

所以,我去研究了第一个idvar为3的idvar,其中包括:

SELECT * FROM table WHERE month = 7 AND idcol = '000039844553332';

我希望只看到3行,但最终找到了469行!这很奇怪,但后来我碰巧运行了上面的原始代码行,但使用了LIMIT 5而最终得到了:

000005185884381 13
000017027256315 75
000010121767109 25
000013731352481 59
000024387407996 1

而且,可能很难看到,因为idcol太长了,但idvar 000017027256315在我做LIMIT 10时最终计数为531而在我做{{1}时仅为75 }。

我缺少什么?!如何才能正确计算少量数值,以便进一步调查?!

BTW我的第一个想法是让计数部分成为一个子查询,但这并没有改变一件事。我用过:

LIMIT 5

......同样的结果

1 个答案:

答案 0 :(得分:0)

最有可能的计数来自统计数据。请参阅此处查看bug及相关讨论。

hive.compute.query.using.stats = FALSE

如果这不能解决,请在运行count(*)

之前尝试ANALYZE命令
ANALYZE TABLE table_name PARTITION(month) COMPUTE STATISTICS;