当遇到多表关联的时候,尤其是主表外连接多个右表,其中关联字段为右表的hash键的时候,这时候为防止破坏hash分布计算,可根据右表数据量的大小将其创建为复制表。
举例:
Select
…
…
from rep.statcmain a – 80989472 hash列policyno
inner join rep.statdcompanylevel d --25887 replicate
on a.comcode = d.comcode
left join rep.statdagent l --86485 replicate
on a.agentcode = l.agentcode
left join rep.temp_prpcengagenew pr --164205 hash列policyno
on a.policyno = prpcengagenew.policyno
left join rep.statdcarmodel b --178758 replicate
on a.modelcode = b.modelcode
left join rep_dev.odsbi_prpmotorcade i --288949 replicate
on a.contractno = i.contractno
left join …
其中,主表rep.statcmain数据量80989472,hash列policyno,但外连接表rep.statdcompanylevel,rep.statdagent,rep.statdcarmodel,rep_dev.odsbi_prpmotorcade的关联字段为非hash键,将这些表创建为复制表,可以防止拉表做到一步下发。