我在小型 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”,但正如预期的那样,这并没有让我走得太远。
试试这个:
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;
更新greenplum,修复以下问题的bug: https://github.com/greenplum-db/gpdb/issues/14993