4
如果我在具有特定分區列的表上運行以下配置單元查詢,我想確保配置單元不執行全表掃描,只是從元數據本身中找出結果。有什麼辦法可以啓用它嗎?如何調整配置單元以查詢元數據?
Select max(partitioned_col) from hive_table ;
現在,當我運行此查詢,其發射地圖reduce任務,我相信它做掃描數據,同時可以很好地計算出從元數據本身的價值。
如果我在具有特定分區列的表上運行以下配置單元查詢,我想確保配置單元不執行全表掃描,只是從元數據本身中找出結果。有什麼辦法可以啓用它嗎?如何調整配置單元以查詢元數據?
Select max(partitioned_col) from hive_table ;
現在,當我運行此查詢,其發射地圖reduce任務,我相信它做掃描數據,同時可以很好地計算出從元數據本身的價值。
每次更改數據時計算表統計量。
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