1、join連接時的優(yōu)化_當三個或多個以上的表進行join操作時,如果每個on使用相同的字段連接時只會產(chǎn)生一個mapreduce。
2、join連接時的優(yōu)化_當多個表進行查詢時,從左到右表的大小順序應(yīng)該是從小到大。原因_hive在對每行記錄操作時會把其他表先緩存起來,直到掃描最后的表進行計算
3、在where字句中增加分區(qū)過濾器。
4、當可以使用left semi join語法時不要使用inner join,前者效率更高。原因_對于左表中指定的一條記錄,一旦在右表中找到立即停止掃描。
5、如果所有表中有一張表足夠小,則可置于內(nèi)存中,這樣在和其他表進行連接的時候就能完成匹配,省略掉reduce過程。
設(shè)置屬性即可實現(xiàn),
set hive.auto.covert.join_true;
用戶可以配置希望被優(yōu)化的小表的大小
set hive.mapjoin.smalltable.sia_2500000;如果需要使用這兩個配置可置入$HOME/.hiverc文件中。
6、同一種數(shù)據(jù)的多種處理_從一個數(shù)據(jù)源產(chǎn)生的多個數(shù)據(jù)聚合,無需每次聚合都需要重新掃描一次。
例如_
insert overwrite table student select * from employee;
insert overwrite table person select * from employee;
可以優(yōu)化成_
from employee
insert overwrite table student select *
insert overwrite table person select *
7、limit調(diào)優(yōu)_limit語句通常是執(zhí)行整個語句后返回部分結(jié)果。
Set hive.limit.optimia.enable_true;
8、開啟并發(fā)執(zhí)行。某個job任務(wù)中可能包含眾多的階段、其中某些階段沒有依賴關(guān)系可以并發(fā)執(zhí)行,開啟并發(fā)執(zhí)行后job任務(wù)可以更快的完成。
設(shè)置屬性_
set hive.e>ecparallel_true;
9、hive提供的嚴格模式,禁止3種情況下的查詢模式。
a_當表為分區(qū)表時,where字句后沒有分區(qū)字段和限制時,不允許執(zhí)行。
b_當使用order by語句時,必須使用limit字段,因為order by只會產(chǎn)生一個reduce任務(wù)。
c_限制笛卡爾積的查詢。