首页/数据/数仓建模速查/MapJoin:小表广播避免 shuffle
湖仓与引擎63 条

MapJoin:小表广播避免 shuffle

MapJoin 把小表加载到每个 mapper 内存做本地关联,省掉 shuffle;触发条件与小表阈值可配置,倾斜大 join 场景常用。

数仓建模速查数据更新于 2026-10-12
原理小表广播到 mapper
收益免 shuffle
阈值hive.auto.convert.join.noconditionaltask.size
风险内存溢出

MapJoin 写法

MapJoin 写法
set hive.auto.convert.join=true;
set hive.auto.convert.join.noconditionaltask.size=26214400;  -- 25MB

SELECT /*+ MAPJOIN(d) */ o.order_id, d.customer_name
FROM dwd_trade_order_di o
JOIN dim_customer d ON o.customer_sk = d.customer_sk
WHERE o.dt='2026-10-12';
「小表」实际不小(统计信息过期)会导致 mapper 内存溢出,需要及时更新统计信息。

易错点

  • 依赖统计信息却从不 analyze,MapJoin 判断失误

数据来源与参考

  • Apache Hive 官方文档:MapJoin
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌