对于最简单的情况,我们都提到:
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. 如果是假的,我很想知道它在大数据环境下的合理使用。
非常感谢!!:)
1条答案
按热度按时间rsaldnfx1#
你的经历很有趣。我已经有好几年没有看到单一的减速器效果了
distinct
与group by
. 也许这两个结构之间的优化器有一些细微的差别。hive中一个“著名”的例子是:
与
前者只用一个减速器,后者并联运行。我在我的经验中都看到了这一点,并对此进行了记录和讨论(例如,在本演示的幻灯片26和27中)。所以,
distinct
完全可以利用并行性。我想随着Hive的成熟,这些问题将会得到解决。然而,具有讽刺意味的是,postgres也有类似的性能问题
COUNT(DISTINCT)
,尽管我认为根本原因有点不同。