Greenplum COUNT(DISTINCT) 对静态数据集上的相同查询迭代产生不同的结果

问题描述 投票:0回答:2

我在小型 Linux 服务器上使用运行 PSQL (v 9.4.26) 的 Greenplum 数据库 (v 6.22.1)。我正在分析分布在 6 个细分市场中的约 3600 万行数据。我想用一个相当简单的查询来计算每月的唯一用户数:

SELECT month, COUNT(DISTINCT(user_id)) AS no_users
FROM users_table
GROUP BY month
ORDER BY month

正如预期的那样,我得到如下所示的输出:

没有用户
2022-08-01 490005
2022-09-01 510015

但是,当我重新运行上面的查询(没有更改数据)时,我得到以下结果:

没有用户
2022-08-01 490020
2022-09-01 510001

每次重新运行查询时都会发生这种情况,每次结果之间没有明显的模式。我重建了表格并重新上传了数据,但无济于事。有谁知道可能导致此问题的原因是什么?我求助于谷歌搜索“Greenplum broken”,但正如预期的那样,这并没有让我走得太远。

sql greenplum
2个回答
0
投票

试试这个:

VACUUM (VERBOSE, ANALYZE) users_table;

检查段上的数据分布:

SELECT count(*) c, gp_segment_id FROM users_table GROUP BY 2;

仔细检查查询结果是否等于您的 COUNT(*) :

select sum(c) from (SELECT count(*) c, gp_segment_id FROM users_table GROUP BY 2) x;

应该等于:

select count(*) from users_table;

0
投票

更新greenplum,修复以下问题的bug: https://github.com/greenplum-db/gpdb/issues/14993

© www.soinside.com 2019 - 2024. All rights reserved.