此腳本運(yùn)行速度慢,主要是reduce端數(shù)據(jù)傾斜導(dǎo)致的,了解到dw.fct_traffic_navpage_path_detl表是用來收集用戶點(diǎn)擊數(shù)據(jù)的,那么最終
創(chuàng)新互聯(lián)一直在為企業(yè)提供服務(wù),多年的磨煉,使我們在創(chuàng)意設(shè)計(jì),營銷型網(wǎng)站到技術(shù)研發(fā)擁有了開發(fā)經(jīng)驗(yàn)。我們擅長傾聽企業(yè)需求,挖掘用戶對產(chǎn)品需求服務(wù)價(jià)值,為企業(yè)制作有用的創(chuàng)意設(shè)計(jì)體驗(yàn)。核心團(tuán)隊(duì)擁有超過10余年以上行業(yè)經(jīng)驗(yàn),涵蓋創(chuàng)意,策化,開發(fā)等專業(yè)領(lǐng)域,公司涉及領(lǐng)域有基礎(chǔ)互聯(lián)網(wǎng)服務(wù)綿陽機(jī)房托管、App定制開發(fā)、手機(jī)移動建站、網(wǎng)頁設(shè)計(jì)、網(wǎng)絡(luò)整合營銷。
購物車和下單的點(diǎn)擊肯定極少,所以此表ordr_code字段為空和cart_prod_id字段為NULL的數(shù)據(jù)量極大,如下所示:
select ordr_code,count(*) as a from dw.fct_traffic_navpage_path_detl where ds = '2015-05-10' group by ordr_code having a>10000 ;
151722135
select cart_prod_id,count(*) as a fromdw.fct_traffic_navpage_path_detl where ds = '2015-05-10' groupby cart_prod_id having a>10000 ;
NULL 127233335
對于create table tmp_lifan_trfc_tpa as這句SQL,BI加上如下配置,
set hive.mapjoin.smalltable.filesize = 120000000; //因?yàn)?nbsp;dw.univ_parnt_tranx_comb_detl表最大不超過120MB,如果是hive on tez要用hive.auto.convert.join.noconditionaltask.size ,這樣tez會生成BROADCAST
sethive.auto.convert.join=true;
同時(shí)修改SQL如下語句:
from dw.fct_traffic_navpage_path_detl t
left outer join dw.univ_parnt_tranx_comb_detl o //用mapjoin解決數(shù)據(jù)傾斜
on t.ordr_code = o.parnt_ordr_code
and t.cart_prod_id = o.comb_prod_id
and o.ds = '2015-05-10'
left outer join bic.cust_first_ordr_tranx f
on case when o.end_user_id is null then cast(rand(9)*100as bigint) else o.end_user_id end= f.end_user_id //join后數(shù)傾斜用隨機(jī)數(shù)避免傾斜 ,紅色為修改部分
and f.first_ordr_date_id = '2015-05-10'
where t.ds = '2015-05-10';
運(yùn)行后SQL可以在可控時(shí)間內(nèi)完成。