2016-10-09 14 views
1

カラムフライトナンバー(10バケット)に基づいてバケットテーブルがあり、データサイズは約700MBです。ハイブでバケットが最適化されていません

クエリを実行しているとき:select count(flightnum)from flight_buck where flightnum = 10; 約46秒で応答が得られます。合計マッパー数は27.

同じデータを持つ非バケットテーブルで同じクエリを実行する場合: flight_tempからの選択カウント(flightnum)where flightnum = 10; 約47秒で応答が得られます。使用されたマッパの総数は303030です。

なぜ私は同じ時間内に応答を得ていますか?

答えて

3

Bucketingを使用すると、結合が速くなり、パーティション化されたテーブルを使用する必要がある単純なSELECT速度が向上します。 flightnumでテーブルを分割して、選択を再度実行してください。

どうしてですか?

のは、このようなバケット分割されていないテーブルを作成してみましょう:各減速機は、同じキーでレコードのみを処理しますので、

create table `t1b`( 
    `exchange` string, 
    `stock_symbol` string, 
    `date` string, 
    `stock_price_open` float, 
    `stock_price_high` float, 
    `stock_price_low` float, 
    `stock_price_close` float, 
    `stock_volume` int, 
    `stock_price_adj_close` float) 
clustered by (`stock_symbol`) sorted by (`date`) into 306 buckets; 

とのデータとそれを埋める聞かせし...など、多くのバケツなど、多くの減速がありますし、日付

enter image description here

...のは、HDFSを見てみましょうすることで、この場合には、あなたが好きなソートを使用して、そのファイルにデータを保存します我々が得たもの個の

ますのでご注意ください。.. 306ファイル(バケット)...

enter image description here

と同じクラスタ化キーを持つレコードが存在し、それらの各内部

...

enter image description here

すべてのファイルは同じフォルダにあります。ハイブで選択すると、探している値を保持しているファイルを理解する方法がないため、パーティション化なしでバケット処理を実行すると、私たちが探しているデータです。

バケツは何をしますか?データをジョインするときは、バケット全体をRAMにロードすることができ、REDUCEで低速ジョインを行う代わりにMAPで高速ジョインを得ることができます。

+0

なぜそうですか?すべての日付がクエリによって読み取られていますか? –

+0

上記の更新の回答をご覧ください。 – ozw1z5rd

+0

お返事ありがとうございます。 –

関連する問題