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