Hints

最近更新时间:2026-05-20 14:11:22

我的收藏

描述

提示(Hints)为用户提供了一种建议 Spark SQL 使用特定方法生成执行计划的方式。

语法

/*+ hint [ , ... ] */

参数说明

分区提示类型

子句/关键字
说明
COALESCE
减少分区数量
REPARTITION
使用指定表达式重新分区
REPARTITION_BY_RANGE
使用范围分区
REBALANCE
重新平衡输出分区大小

JOIN 提示类型

子句/关键字
说明
BROADCAST/BROADCASTJOIN/MAPJOIN
建议使用广播 JOIN
MERGE/SHUFFLE_MERGE/MERGEJOIN
建议使用排序合并 JOIN
SHUFFLE_HASH
建议使用 Shuffle Hash JOIN
SHUFFLE_REPLICATE_NL
建议使用 Shuffle-and-Replicate 嵌套循环 JOIN

示例

-- 创建测试表
CREATE EXTERNAL TABLE hint_t1 (key INT, val STRING)
USING PARQUET LOCATION 'cosn://<your_cos_bucket>/test_hints/hint_t1';
CREATE EXTERNAL TABLE hint_t2 (key INT, val STRING)
USING PARQUET LOCATION 'cosn://<your_cos_bucket>/test_hints/hint_t2';
INSERT INTO hint_t1 VALUES (1,'a'),(2,'b');
INSERT INTO hint_t2 VALUES (1,'x'),(3,'y');

-- 分区合并 COALESCE
SELECT /*+ COALESCE(1) */ * FROM hint_t1;

-- 强制重分区(必触发 shuffle)
SELECT /*+ REPARTITION(2) */ * FROM hint_t1;

-- 强制广播 Join
SELECT /*+ BROADCAST(hint_t1) */ * FROM hint_t1 INNER JOIN hint_t2 ON hint_t1.key = hint_t2.key;

-- 强制 Sort Merge Join
SELECT /*+ SHUFFLE_MERGE(hint_t1) */ * FROM hint_t1 INNER JOIN hint_t2 ON hint_t1.key = hint_t2.key;

-- 强制 Shuffle Hash Join
SELECT /*+ SHUFFLE_HASH(hint_t1) */ * FROM hint_t1 INNER JOIN hint_t2 ON hint_t1.key = hint_t2.key;