问题:大表left join小表,小表有20万条,大概就12M大小。大表有30多亿条,对应分区下有40个HDFS文件,简单的一个left join,跑了几个小时跑不出结果。
INSERT OVERWRITE TABLE 结果表 PARTITION(dt='20220302')
select
vertice,types,gid
from (
select
vertice,gid,types
from
大表
where dt='20220302'
) a
left join (
SELECT
srcgid,dstgid
FROM
小表
WHERE dt='20220302') as b
on a.gid = b.srcgid
解决:
1. 刚开始没仔细研究,做了两个优化:小表cache然后广播;大表select的时候重分区,增加并发数,还是没跑过,发现执行到left join的时候,数据膨胀得非常大,6000万的数据 join 20万数据,膨胀到千亿条。
2. 定位发现