让我先说,我对Hive非常陌生,所以我不确定人们需要什么信息来帮助我。请告诉我哪些信息有用。另外,虽然我通常会创建一个小数据集来重现问题,但我认为这个问题与数据集的规模有关,因为我似乎无法在较小的数据集上重现问题。让我知道如果你有建议,使这个更容易回答。
好了,那就不碍事了,我的问题来了。我有一个巨大的数据集,按月分区,每个月大约有5亿行。我有一个列,其中有一个id号(我称之为idcol),我想仔细研究几个例子,其中重复id的数量很多,而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,结果是:
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
结果我数到531 LIMIT 10
而我做的时候只有75岁 LIMIT 5
.
我错过了什么?!我怎样才能得到一个正确的计数只有一小部分的值,以便我可以进一步调查?!
顺便说一句,我的第一个想法是使计数部分成为一个子查询,但这并没有改变什么。我用过:
SELECT * FROM (SELECT idcol, COUNT(*) FROM table WHERE month = 7 GROUP BY idcol) x LIMIT 10;
…同样的结果
1条答案
按热度按时间ffdz8vbo1#
计数很可能是从统计数据中计算出来的。请参阅此处了解错误和相关讨论。
如果这还不能解决问题,请在运行count(*)之前尝试analyze命令