hive.auto.convert.join=false 預設關閉。/*+ MAPJOIN(t) */ 或手動開啟參數。hive.auto.convert.join=true (預設開啟)。hive.auto.convert.join.noconditionaltask=true + noconditionaltask.size=10MB:n-1 張小表總 Hash 大小閾值內自動合併為單一 MapJoin。多維表 Join 事實表時,自動識別星型結構,將多個 MapJoin 合併為單一 Map-only Job,事實表僅掃描一次,大幅降低 I/O。
SELECT COUNT(*) FROM store_sales ss JOIN time_dim t ON ss.ss_sold_time_sk = t.t_time_sk JOIN date_dim d ON ss.ss_sold_date_sk = d.d_date_sk WHERE t.t_hour=8 AND d.d_year=2002;
自動轉為單 MapJoin,無需 Hint。
針對已分桶排序的大表 Join,避免 Shuffle,直接 Map 端合併。
SET hive.auto.convert.sortmerge.join=true; SET hive.optimize.bucketmapjoin=true; SET hive.optimize.bucketmapjoin.sortedmerge=true; SET hive.auto.convert.sortmerge.join.noconditionaltask=true;
大表選擇策略可配置 (平均分區大小 / 最左表 / 表總大小)。
dfs.replication)。