1. 程式人生 > 其它 >Hive SQL查詢引數優化

Hive SQL查詢引數優化

技術標籤:大資料hadoophive

【引數一】 hive.fetch.task.conversion 決定sql查詢是否以叢集模式執行

查詢sql :
select trans_params,trans_result from ods.tablename where trans_code=‘CF000078’ limit 10
耗時很長,期間沒有走叢集,檢視日誌查詢會fetch HDFS每日資料分割槽

檢視該引數值為more:
在這裡插入圖片描述

檢視執行計劃:

explain select trans_params,trans_result from ods.tablename  where
trans_code=
'CF000078' limit 10;

在這裡插入圖片描述
可見只有一個stage,即Fetch Operator,只進行HDFS對應目錄下資料的抓取。

hive中可以通過引數控制查詢是否走叢集:
hive.fetch.task.conversion=more時,全域性查詢,欄位查詢,filter查詢(如id>1),limit查詢等都不走叢集,直接fetch,建議在資料量小時使用fetch。
hive.fetch.task.conversion=none時,關閉fetch task優化,所有查詢都會以叢集模式執行。

【引數二】 hive.compute.query.using.stats 統計sql查詢結果是否從統計資訊中獲取

hive.compute.query.using.stats=false時,select count(*) from直接從元資料儲存的統計資訊中獲取表中記錄條數;

ANALYZE TABLE wktest.test_decimal  COMPUTE STATISTICS;

在這裡插入圖片描述
如上圖所示,numRows=4,即該表元資料統計資訊中已記錄條數為4。

hive.compute.query.using.stats=true時,該sql查詢會以叢集模式執行返回結果。
說明:當向表中以hadoop fs -put的方式上傳資料檔案時,直接從元資料無法獲取到最新的表記錄條數。