当遇到多表关联的时候,尤其是主表外连接多个右表,其中关联字段为右表的 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 键,将这些表创建为复制表,可以防止拉表做到一步下发。