HiveQL與標(biāo)準(zhǔn)SQL的區(qū)別:
陷阱1:
SELECT *
FROM first_table t1
JOIN second_table t2
ON t1.id = t2.id
where t1.date = "2016-06-01"
在hive里面,沒有SQL優(yōu)化器徙垫,則這樣些的后果是愈捅,直接將t1表與t2表全量連接瓦侮,產(chǎn)生大量的MapReduce操作再進(jìn)行過濾
正確寫法:
SELECT *
FROM
( SELECT * FROM first_table WHERE date = "2016-06-01") t1
JOIN second_table t2
ON t1.id = t2.id;
其實(shí)上面的語句還不是最好的,因?yàn)閔ive通常處理的都是大數(shù)據(jù)表,上億至少小case专筷。hive sql里不推薦用嵌套子查詢語句糖埋,就是為了減小查詢負(fù)擔(dān)忿项。
更優(yōu)的寫法是join...on 后面闷旧,用and代替where长豁。為什么?用and的話忙灼,查詢是先過濾條件匠襟,得到一個較小的表,然后再跟其他表聯(lián)合该园。這樣酸舍,無形中,就能節(jié)省下不小的運(yùn)算量里初,自然就更快了啃勉!
更優(yōu)的寫法:
SELECT *
FROM first_table t1
JOIN second_table t2
ON t1.id = t2.id
and t1.date = "2016-06-01";
好!本文到底了~謝謝大家的閱讀双妨! 如果大家有建議和指教璧亮,請?jiān)谙路降脑u論里,發(fā)表您的高見斥难。或者私信我帘饶,也OK啦哑诊!