distinct与group哪个更好

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

对于最简单的情况,我们都提到:

select id from mytbl 
group by id

select distinct id from mytbl

如我们所知,它们生成了相同的查询计划,这些计划在某些项目中被反复提及,例如“distinct”或“group by”
在Hive中,前者只有一个reduce任务,而后者有多个reduce任务。
从实验中,我发现分组比distinct快10多倍
他们是不同的。
所以我学到的是:

不管怎么说,分组并不比单独的差,有时也比单独的好

我想知道:

1. 如果这个结论是真的。
2. 如果是真的,我将把distinct看作是一种逻辑上方便的方法,但是为什么distinct不采用GROUPBY更好的实现呢?
3. 如果是假的,我很想知道它在大数据环境下的合理使用。

非常感谢!!:)

rsaldnfx

rsaldnfx1#

你的经历很有趣。我已经有好几年没有看到单一的减速器效果了 distinctgroup by . 也许这两个结构之间的优化器有一些细微的差别。
hive中一个“著名”的例子是:

select count(distinct id)
from mytbl;

select count(*)
from (select distinct id
      from mytbl
     ) t;

前者只用一个减速器,后者并联运行。我在我的经验中都看到了这一点,并对此进行了记录和讨论(例如,在本演示的幻灯片26和27中)。所以, distinct 完全可以利用并行性。
我想随着Hive的成熟,这些问题将会得到解决。然而,具有讽刺意味的是,postgres也有类似的性能问题 COUNT(DISTINCT) ,尽管我认为根本原因有点不同。

相关问题