조인 힌트 - AWS Clean Rooms

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

조인 힌트

조인 힌트는 쿼리 실행을 위한 조인 전략을 제안합니다. 구문, 인수 및 일부 예제는 자세한 내용은 Apache Spark SQL 참조에서 가져옵니다.

브로드캐스트

브로드캐스트 조인을 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

셔플 정렬 병합 조인을 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

셔플 해시 조인을 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

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의 힌트 문제 해결

다음 표에는 SparkSQL에서 힌트가 적용되지 않는 일반적인 시나리오가 나와 있습니다. 자세한 내용은 고려 사항 및 제한 사항 섹션을 참조하세요.

사용 사례 쿼리 예제
테이블 참조를 찾을 수 없음
SELECT /*+ BROADCAST(fake_table) */ * FROM employees e INNER JOIN students s ON e.eid = s.sid;
조인 작업에 참여하지 않는 테이블
SELECT /*+ BROADCAST(s) */ * FROM students s WHERE s.age > 25;
중첩 하위 쿼리의 테이블 참조
SELECT /*+ BROADCAST(s) */ * FROM employees e INNER JOIN (SELECT * FROM students s WHERE s.age > 20) sub ON e.eid = sub.sid;
테이블 참조 대신 열 이름
SELECT /*+ BROADCAST(e.eid) */ * FROM employees e INNER JOIN students s ON e.eid = s.sid;
필수 파라미터가 없는 힌트
SELECT /*+ BROADCAST */ * FROM employees e INNER JOIN students s ON e.eid = s.sid;
테이블 별칭 대신 기본 테이블 이름
SELECT /*+ BROADCAST(employees) */ * FROM employees e INNER JOIN students s ON e.eid = s.sid;