最简单的情况我们都参考:
select id from mytbl
group by id
and
select distinct id from mytbl
正如我们所知,它们生成相同的查询计划,该计划在某些项目中反复提到,例如哪个更好:不同或分组依据 https://stackoverflow.com/questions/374973/which-is-better-distinct-or-group-by
然而在hive中,前者只有一个reduce任务,而后者有很多。
通过实验,我发现 GROUP BY 是10次以上比 DISTINCT 更快。
他们是不同的。
所以我学到的是:
GROUP-BY 无论如何并不比 DISTINCT 差,有时甚至更好。
我想知道:
1。如果这个结论是真的的话。
2。如果属实,我将认为 DISTINCT 是一种逻辑方便的方法,但为什么 DISTINCT 不采用 GROUP-BY 的更好实现呢?
3。如果是假的,我会非常渴望知道它在大数据情况下的正确用法。
非常感谢!!:)
你的经历很有趣。我还没有看到单个减速器的效果distinct
versus group by
。也许这两种结构之间的优化器存在一些细微的差异。
Hive 中一个“著名”的例子是:
select count(distinct id)
from mytbl;
versus
select count(*)
from (select distinct id
from mytbl
) t;
前者仅使用一个减速器,后者并行运行。我在我的经验中看到了这一点,并且对其进行了记录和讨论(例如,在本文档的第 26 和 27 张幻灯片中)推介会 http://www.slideshare.net/oom65/optimize-hivequeriespptx). So, distinct
绝对可以利用并行性。
我想随着 Hive 的成熟,这些问题将会得到解决。然而,讽刺的是 Postgres 也有类似的性能问题COUNT(DISTINCT)
,尽管我认为根本原因有点不同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)