

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 加入提示
<a name="join-hints"></a>

联接提示建议查询执行的联接策略。语法、参数和一些示例来自《[Apache Spark SQL 参考](https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-hints.html#join-hints)》以获取更多信息

### 广播
<a name="broadcast-hint"></a>

建议 AWS Clean Rooms 使用广播加入。无论 autoBroadcastJoin阈值如何，带有提示的加入方都会被广播。如果联接的两边都有广播提示，则将广播大小较小的那个（基于统计数据）。

*别名：*广播加入、MAPJOIN

*参数：*表标识符（可选）

*示例：*

```
-- Broadcast a specific table
SELECT /*+ BROADCAST(students) */ e.name, s.course
FROM employees e JOIN students s ON e.id = s.id;

-- Broadcast multiple tables
SELECT /*+ BROADCASTJOIN(s, d) */ *
FROM employees e
JOIN students s ON e.id = s.id
JOIN departments d ON e.dept_id = d.id;
```

### MERGE
<a name="merge-hint"></a>

建议 AWS Clean Rooms 使用随机排序合并联接。

*别名：*SHUFFLE\_MERGE、MERGEJOIN

*参数：*表标识符（可选）

*示例：*

```
-- Use merge join for a specific table
SELECT /*+ MERGE(employees) */ *
FROM employees e JOIN students s ON e.id = s.id;

-- Use merge join for multiple tables
SELECT /*+ MERGEJOIN(e, s, d) */ *
FROM employees e
JOIN students s ON e.id = s.id
JOIN departments d ON e.dept_id = d.id;
```

### SHUFF\_HASH
<a name="shuffle-hash-hint"></a>

建议 AWS Clean Rooms 使用 shuffle 哈希联接。如果双方都有 shuffle 哈希提示，则查询优化器会选择较小的一方（基于统计数据）作为构建方。

*参数：*表标识符（可选）

*示例：*

```
-- Use shuffle hash join
SELECT /*+ SHUFFLE_HASH(students) */ *
FROM employees e JOIN students s ON e.id = s.id;
```

### SHUFFLE\_REPLICATE\_NL
<a name="shuffle-replicate-nl-hint"></a>

建议 AWS Clean Rooms 使用 shuffle-and-replicate嵌套循环联接。

*参数：*表标识符（可选）

*示例：*

```
-- Use shuffle-replicate nested loop join
SELECT /*+ SHUFFLE_REPLICATE_NL(students) */ *
FROM employees e JOIN students s ON e.id = s.id;
```

### Spark SQL 中的故障排除提示
<a name="join-hint-warning-cases"></a>

下表显示了在 SparkSQL 中未应用提示的常见场景。有关更多信息，请参阅 [注意事项和限制](sql-commands-hints-spark.md#hints-usage-notes)。


| 使用场景 | 示例查询 | 
| --- | --- | 
| 未找到表格引用 | <pre>SELECT /*+ BROADCAST(fake_table) */ *<br />FROM employees e<br />INNER JOIN students s ON e.eid = s.sid;</pre> | 
| 表未参与联接操作 | <pre>SELECT /*+ BROADCAST(s) */ *<br />FROM students s<br />WHERE s.age > 25;</pre> | 
| 嵌套子查询中的表引用 | <pre>SELECT /*+ BROADCAST(s) */ *<br />FROM employees e<br />INNER JOIN (SELECT * FROM students s WHERE s.age > 20) sub<br />ON e.eid = sub.sid;</pre> | 
| 列名而不是表引用 | <pre>SELECT /*+ BROADCAST(e.eid) */ *<br />FROM employees e<br />INNER JOIN students s ON e.eid = s.sid;</pre> | 
| 没有必填参数的提示 | <pre>SELECT /*+ BROADCAST */ *<br />FROM employees e<br />INNER JOIN students s ON e.eid = s.sid;</pre> | 
| 基表名而不是表别名 | <pre>SELECT /*+ BROADCAST(employees) */ *<br />FROM employees e<br />INNER JOIN students s ON e.eid = s.sid;</pre> | 