大表与大表的普通 Join
重点关注 Shuffle 和 JOIN Stage 的数据量是否过大而使磁盘溢出,如果有请增加 Task 数目。
必须尽量避免大表与大表直接 JOIN,所以执行之前要检查分析一下 SQL,如果有小表,先用小表或是过滤率较高的表过滤大表,即尽可能先做与小表有关的 JOIN,再使大表参与进来。
大表与小表的 MapJoin
大表与小表 JOIN 时,需采用 MapJoin。执行 MapJoin 时须重点关注 JOIN 的顺序和过滤后小表的行数。
过滤后小表的行数不能太大,通常允许的小表上限为 20 万条(仅提供参考),如果超过此界限不建议使用 MapJoin。特别的,如果 JOIN 的大表极大,Shuffle的数据极多,考虑到大表与小表的大小的相对性,允许将可接受的小表 行数上限提升至 100 万条。
Shuffle 数据量多
如果重复的元素特别多,将导致 Shuffle 数据量较大,而占据大量内存。所以执行SQL之前应当检查聚合率,如果重复元素很多聚合率高,或者在 4040 界面直观的发现 Shuffle 数据量很大,建议考虑在保证查询任务语义可实现的情况下用 GROUP BY 去重。
文档反馈