count distinct如何优化?

在 Hive 开发过程中,应该小心使用 count distinct ,因为很容易引起性能问题,比如下面的 SQL:

select count(distinct user) from some_table


由于必须去重,因此 Hive 将会把 Map 阶段的输出全部分布到 Reduce Task 上,此时很容易引起性能问题。对于这种情况,可以通过先 group by 再 count 的方式来优化,优化后的 SQL 如下:

select count(*) from ( select user from some_table group by user ) tmp;

原理为:先利用 group by 去重,再统计 group by 的行数目。

标签: distinct、count、group、user、hive、面试
  • 回复