不同的vs组,哪个更好

Chi*_*ron 19 sql hadoop hive distinct

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

select id from mytbl 
group by id
Run Code Online (Sandbox Code Playgroud)

select distinct id from mytbl
Run Code Online (Sandbox Code Playgroud)

正如我们所知,它们会生成相同的查询计划,这些计划在某些项目中反复提及,例如哪个更好:Distinct或Group By

然而,在蜂巢中,前者只有一个减少任务,而后者有许多.

通过实验,我发现GROUP BY 比DISTINCT快10倍.

它们是不同的.

所以我学到的是:

无论如何,GROUP-BY并不比DISTINCT差,有时它更好.

我想知道:

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

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

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

非常感谢你!!:)

Gor*_*off 15

你的经历很有趣.我还没有看到对单一减速效果distinct对比group by.也许两个结构之间的优化器有一些细微的差别.

Hive中一个"着名"的例子是:

select count(distinct id)
from mytbl;
Run Code Online (Sandbox Code Playgroud)

select count(*)
from (select distinct id
      from mytbl
     ) t;
Run Code Online (Sandbox Code Playgroud)

前者仅使用一个减速器,后者并联运行.我在我的经验中已经看到了这一点,并且记录和讨论了它(例如,在本演示文稿中的幻灯片26和27 ).所以,distinct绝对可以利用并行性.

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