2016-10-05 4 views
0

私は2つのテーブルを持っています。
一方はバケツで、他方はバケツではありません - それ以外は同じです。
どちらもorcとして格納され、分割されています。
特定のパーティションでバケットテーブルを照会するのは、同じパーティションでそのツインを照会するよりもはるかに時間がかかります。
期待していますか?
その理由は何ですか?
もしそうなら、私はバケツテーブルを保持する唯一の動機は結合とサンプリングのためだと結論づけるべきです、この場合、テーブルの2つのコピーを保持します - バケット1つと他のものは無駄です?バケットテーブルのハイブクエリが遅い

+0

バケットは、マージとフィルタリングに役立ちます。バケツテーブルの遅さはマージのためのものですか?また、ローカルのHadoopインスタンスで、この問題を一部のエンタープライズHadoopインスタンスよりも再現します。 Hadoopサーバーの負荷が要因になる可能性があります。 – abhiieor

+0

「colA、count(*)from my_table where ds = "2015-09-18" group by colA " - 実際には「フリッタリング」クエリですが、「2015-09-18 "は両方のテーブルのパーティションなので、同様のパフォーマンスが期待されます。 – belostoky

+0

私は唯一のジョブを実行しているので、クラスタの負荷は問題になりません。各クエリが実行されているときに、クラスタ内で実行されている唯一のジョブです。 – belostoky

答えて

0

現在、HIVEはwhere句の列に対するBucketing関連のクエリの最適化をサポートしていません。 Bucketは結合操作中に有益です。上記のユースケースでは、パーティションとORCが並べ替えられた順序で格納されているため、最適な応答が得られます。

関連する問題