web-dev-qa-db-ja.com

ハイブでSelectCount(*)がSelect *より遅いのはなぜですか

Hiveを使用して_VirtualBox Sandbox_でクエリを実行しているとき。 Select count(*)は_Select *_よりも遅すぎると思います。

誰かが背後で何が起こっているのか説明できますか?

そして、なぜこの遅延が起こっているのですか?

19
Haris
select * from table

それは地図だけの仕事になることができますしかし

Select Count(*) from table 

MapandReduceジョブにすることができます

お役に立てれば。

12
Mask

Hiveクエリが実行できる操作には3つのタイプがあります。

ここでは、最も安くて速いものから、より高価で遅いものの順になっています。

Hiveクエリは、メタデータのみのリクエストにすることができます。

テーブルの表示、テーブルの説明は例です。これらのクエリでは、Hiveプロセスがメタデータサーバーでルックアップを実行します。メタデータサーバーはSQLデータベース(おそらくMySQL)ですが、実際のDBは構成可能です。

Hiveクエリはhdfsgetリクエストにすることができます。表から*を選択します。これが例です。この場合、Hiveはhdfs操作を実行することで結果を返すことができます。 hadoop fs -get、多かれ少なかれ。

HiveクエリはMapReduceジョブにすることができます。

Hiveはjarをhdfsに送信する必要があり、jobtrackerはタスクをキューに入れ、tasktrackerはタスクを実行し、最終データはhdfsに入れられるか、クライアントに送信されます。

MapReduceジョブにもさまざまな可能性があります。

マップのみのジョブにすることができます。 id> 100のテーブルから*を選択します。たとえば、そのロジックはすべてマッパーに適用できます。

Map and Reduceジョブにすることができ、テーブルからmin(id)を選択します。 IDによるテーブルの順序から*を選択します。

複数のmapReduceパスにつながる可能性もありますが、上記はいくつかの動作を要約していると思います。

3
Pearl90