

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 조인 힌트
<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 사용하는를 제안합니다. 힌트가 있는 조인 측은 autoBroadcastJoinThreshold와 관계없이 브로드캐스트됩니다. 조인의 양쪽에 브로드캐스트 힌트가 있는 경우 크기가 더 작은 조인(통계 기준)이 브로드캐스트됩니다.

*별칭:* BROADCASTJOIN, 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;
```

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

셔플 해시 조인을 AWS Clean Rooms 사용하는 방법을 제안합니다. 양쪽에 셔플 해시 힌트가 있는 경우 쿼리 옵티마이저는 더 작은 쪽(통계 기반)을 빌드 쪽으로 선택합니다.

*파라미터:* 테이블 식별자(선택 사항)

*예*:

```
-- 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>

shuffle-and-replicate 중첩 루프 조인을 AWS Clean Rooms 사용하는 방법을 제안합니다.

*파라미터:* 테이블 식별자(선택 사항)

*예*:

```
-- 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> | 