描述
提示(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');-- 分区合并 COALESCESELECT /*+ COALESCE(1) */ * FROM hint_t1;-- 强制重分区(必触发 shuffle)SELECT /*+ REPARTITION(2) */ * FROM hint_t1;-- 强制广播 JoinSELECT /*+ BROADCAST(hint_t1) */ * FROM hint_t1 INNER JOIN hint_t2 ON hint_t1.key = hint_t2.key;-- 强制 Sort Merge JoinSELECT /*+ SHUFFLE_MERGE(hint_t1) */ * FROM hint_t1 INNER JOIN hint_t2 ON hint_t1.key = hint_t2.key;-- 强制 Shuffle Hash JoinSELECT /*+ SHUFFLE_HASH(hint_t1) */ * FROM hint_t1 INNER JOIN hint_t2 ON hint_t1.key = hint_t2.key;