web-dev-qa-db-ja.com

明確であるかグループであるか

最も単純なケースでは、私たち全員が参照します。

select id from mytbl 
group by id

そして

select distinct id from mytbl

私たちが知っているように、それらは---のようないくつかの項目で繰り返し言及されていた同じクエリプランを生成します どちらが良いですか:DistinctまたはGroup By

ただし、Hiveでは、前者には1つの削減タスクしかありませんが、後者には多くのタスクがあります。

実験から、GROUP BYは 10回以上 DISTINCTよりも高速です。

彼らは違う。

だから私が学んだことは:

とにかく、GROUP-BYはDISTINCTよりも悪くはなく、場合によってはより良い場合もあります。

私が知りたいのですが:

1。この結論が当てはまる場合。

2。 trueの場合、論理的な便宜のためのアプローチとしてDISTINCTを検討しますが、なぜDISTINCTはGROUP-BYのより良い実装を採用しないのですか?

。 falseの場合、ビッグデータの状況での適切な使用法を知りたいと思っています。

どうもありがとうございました!!:)

19
Chiron

あなたの経験は興味深いものです。 distinctと_group by_の単一のレデューサー効果を見たことはありません。おそらく、2つの構成要素の間のオプティマイザには微妙な違いがあります。

Hiveの「有名な」例は次のとおりです。

_select count(distinct id)
from mytbl;
_

versus

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

前者は1つのレデューサーのみを使用し、後者は並行して動作します。これは私の経験の両方で見たことがありますが、文書化されて議論されています(たとえば、このスライド26と27の presentation )。したがって、distinctは間違いなく並列処理を利用できます。

Hiveが成熟するにつれて、そのような問題は修正されると思います。ただし、根本的な理由は少し異なると思いますが、PostgresがCOUNT(DISTINCT)で同様のパフォーマンスの問題を抱えているのは皮肉なことです。

15
Gordon Linoff