2017-01-31 18 views
4

パーティション化された特定の列を持つテーブルに対して以下のハイブクエリを実行している場合は、ハイブが完全なテーブルスキャンを行わず、メタデータ自体の結果を把握していることを確認します。これを有効にする方法はありますか?今メタデータをクエリするためにハイブをチューニングする方法は?

Select max(partitioned_col) from hive_table ; 

、私はこのクエリを実行しているとき、その打ち上げのマップには、作業を軽減し、私はそれが非常によく、メタデータ自体から値を把握することができますしながら、そのやってデータをスキャンすると確信しています。

答えて

3

データを変更するたびにテーブル統計を計算します。

ANALYZE TABLE hive_table PARTITION(partitioned_col) COMPUTE STATISTICS FOR COLUMNS; 

CBOと統計の自動収集を有効にする:

set hive.cbo.enable=true; 
set hive.stats.autogather=true; 

は、統計を使用してCBOを有効にするために、これらの設定を使用します。

set hive.compute.query.using.stats=true; 
set hive.stats.fetch.partition.stats=true; 
set hive.stats.fetch.column.stats=true; 

何も助けなかった場合、私は見つけるために、このアプローチを適用することをお勧めしたいです最後のパーティション高速: テーブルの場所からシェルスクリプトを使用して最大パーティションキーを解析します。 以下のコマンドは、すべてのテーブルフォルダパス、ソート、最新のソート、最後のサブフォルダ名、パースパーティションフォルダ名、抽出値を出力します。

last_partition=$(hadoop fs -ls $TABLE_DIR/* | awk '{ print $8 }' | sort -r | head -n1 | cut -d/-f [number of partition subfolder in the path here] | cut -d = -f 2 

その後

-hiveconf last_partition=$last_partition 
としてスクリプトに渡す $last_partition変数を使用します
関連する問題