2017-01-11 4 views
0

のテーブルをハイブの内側に持っています。そのテーブルからすべてのデータをフェッチします。1つのクエリはマップの縮小を実行し、もう1つは

select count(*) from tbl; 

がなぜあること:

select * from tbl; 

は私には非常に異なる結果が得られます。問題があるということ? 2番目のクエリはハーフマップマップを減らして実行しているようですが、最初のクエリは結果を返します。テーブルは分割されていないか、バケツではなく、テキスト(csv)形式です。

+0

あなたと同じ質問があります:https://stackoverflow.com/questions/7466454/how-does-hive-decide-when-to-use-map-reduce-and-when-not-toそしてそこに受け入れられている答えが存在します。 – maxteneff

答えて

0

Hiveクエリを送信すると、Hiveはクエリを1つ以上の段階に変換します。ステージは、MapReduceステージ、サンプリングステージ、マージステージ、リミットステージ、またはHiveが行う必要のある他の可能なタスクです。

select * from table_name;

このクエリは、単にそのため、コンソール上の異なるログ出力を参照して、テーブル全体をスキャンし、画面に出力をダンプします。

select count(*) from table_nameはHiveメタ情報をスキャンし、その結果を自分自身から入力します。また、MapReduceジョブは実行されません。

Hiveコンソールで以下のコマンドを実行すると、情報全体を見ることができます。

hive> describe formatted table_name;

表パラメータ:Hadoopので

COLUMN_STATS_ACCURATE true 
numFiles    xx 
numRows     xxxxxxxx 

、凝集/条件/算術演算などは、結果を処理し、実行する処理エンジンを必要とし、あなたが仕事のこのタイプを提出するたびので、それは内部に変換されますMapReduceプログラムでは、MapReduceプログラムがクエリの代わりに実行され、その結果が画面上のハイブとハイブに表示されるため、別の結果が表示されます。

クエリの前にEXPLAINというキーワードを付けると、クエリプランなどの情報を表示できます。

Hive EXPLAINの機能の詳細については、Programming Hadoop Book、第10章を参照してください。

関連する問題