不同的vs组,哪个更好

时间:2015-08-07 11:01:55

标签: sql hadoop hive distinct

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

select id from mytbl 
group by id

select distinct id from mytbl

我们知道,他们会生成相同的查询计划,这些计划在Which is better: Distinct or Group By

等项目中反复提及 然而,在蜂巢中,前者只有一个减少任务,而后者有很多。

通过实验,我发现GROUP BY比DISTINCT快 10+次

他们是不同的。

所以我学到的是:

GROUP-BY无论如何都不比DISTINCT差,有时候会更好。

我想知道:

1 的。如果这个结论是真的。

2 的。如果为真,我会将DISTINCT视为一种方便的逻辑方法,但为什么DISTINCT不采用GROUP-BY更好的实现?

3 的。如果不对,我会非常渴望知道它在大数据情况下的合理使用。

非常感谢!!:)

1 个答案:

答案 0 :(得分:15)

您的经历很有趣。我没有看到distinctgroup by的单一缩减效果。也许两个结构之间的优化器存在一些细微差别。

Hive中一个“着名”的例子是:

select count(distinct id)
from mytbl;

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

前者仅使用一个减速器,后者同时运行。我在我的经验中已经看到了这一点,并且有记录和讨论(例如,在presentation中的幻灯片26和27)。因此,distinct绝对可以利用并行性。

我想,随着Hive的成熟,这些问题将得到解决。然而,具有讽刺意味的是Postgres与COUNT(DISTINCT)有类似的性能问题,尽管我认为其根本原因有点不同。