2017-01-31 123 views
4

如果我在具有特定分區列的表上運行以下配置單元查詢,我想確保配置單元不執行全表掃描,只是從元數據本身中找出結果。有什麼辦法可以啓用它嗎?如何調整配置單元以查詢元數據?

Select max(partitioned_col) from hive_table ; 

現在,當我運行此查詢,其發射地圖reduce任務,我相信它做掃描數據,同時可以很好地計算出從元數據本身的價值。

回答

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; 

如果沒有什麼幫助,我建議使用這種方法的尋找最後一個分區快速: 使用表格位置中的shell腳本解析最大分區鍵。 下面的命令將打印所有表文件夾路徑,排序,採取最新排序,取最後一個子文件夾名稱,解析分區文件夾名稱和提取值。

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 

然後使用$last_partition變量傳遞給你的腳本

-hiveconf last_partition=$last_partition 
相關問題