配置单元选择列,计数(*)不匹配

bq9c1y66  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(296)

让我先说,我对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;

…同样的结果

ffdz8vbo

ffdz8vbo1#

计数很可能是从统计数据中计算出来的。请参阅此处了解错误和相关讨论。

hive.compute.query.using.stats = FALSE

如果这还不能解决问题,请在运行count(*)之前尝试analyze命令

ANALYZE TABLE table_name PARTITION(month) COMPUTE STATISTICS;

相关问题