溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

hive sql 優(yōu)化 數(shù)據(jù)傾斜

發(fā)布時(shí)間:2020-06-27 15:56:36 來源:網(wǎng)絡(luò) 閱讀:1248 作者:r7raul 欄目:大數(shù)據(jù)


 

此腳本運(yùn)行速度慢,主要是reduce端數(shù)據(jù)傾斜導(dǎo)致的,了解到dw.fct_traffic_navpage_path_detl表是用來收集用戶點(diǎn)擊數(shù)據(jù)的,那么最終

購物車和下單的點(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)?span > dw.univ_parnt_tranx_comb_detl表最大不超過120MB,如果是hive on tez要用hive.auto.convert.join.noconditionaltask.size ,這樣tez會(huì)生成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)完成。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI