DynamoDB는 조인을 지원합니까?
데이터베이스 자체에는 없습니다. 비관계형 데이터베이스인 DynamoDB에는 JOIN 작업이 없고 PartiQL은 작업을 추가하지 않으므로 프로덕션 읽기의 경우 대신 관련 데이터를 모델링합니다. 즉, 비정규화(복제 또는 포함하여 각 액세스 패턴이 하나의 쿼리가 되도록)하거나 단일 테이블 설계를 사용하여 관련 항목을 하나의 파티션 키 아래에 함께 배치합니다. 하지만 클라이언트에서 DynamoDB 테이블에 대해 실제 조인을 실행할 수 있습니다. DynoTable의 SQL Workbench는 실제 JOIN, GROUP BY 및 라이브 데이터에 대한 집계 쿼리를 실행합니다.
데이터베이스에 조인이 없는 이유
DynamoDB는 모든 규모에서 예측 가능한 한 자릿수 밀리초 읽기를 위해 구축되었습니다. 읽기 시간에 조인하면 관련 데이터의 양에 따라 대기 시간이 달라져 해당 보장이 깨집니다. 따라서 모델링된 액세스 패턴의 경우 쓰기 시 사용자가 조인을 수행합니다.
시도하면 어떻게 되나요?
PartiQL은 무엇이든 읽기 전에 파서의 명령문을 거부합니다. 명시적 조인과 쉼표 교차 조인은 모두 같은 방식으로 실패합니다.
SELECT o."total", c."name" FROM "Orders" o JOIN "Customers" c ON o."pk" = c."id"
SELECT * FROM "Orders", "Customers"ValidationException: Only select from a single table or index is supported.
HTTP 400따라서 프로덕션에서 발견할 수 있는 느리지만 작동하는 대체 방법은 없습니다. 두 테이블의 이름을 지정하는 문은 구문 오류이므로 작업이 다른 곳, 즉 데이터 모델이나 관계 부분 자체를 수행하는 클라이언트로 이동해야 합니다.
모델링된 액세스 패턴을 위해 수행하는 작업
- Denormalization — 함께 읽는 관련 데이터를 복사하거나 삽입하세요.
- 단일 테이블 디자인 — 오버로드된 키를 사용하여 여러 엔터티 유형을 하나의 테이블에 저장하므로 항목 컬렉션이 하나의 쿼리에서 이를 함께 읽습니다.
- 인접 목록 — 키로 쿼리하는 항목으로 다대다 관계를 모델링합니다.
이는 프로덕션에서 단일 요청을 계속 읽습니다. DynamoDB joins의 전체 연습.
DynoTable로 실제 JOIN 실행
귀하가 모델로 삼지_않은_ 임시 교차 테이블 질문의 경우 "지난 달에 500달러 이상 지출한 EU 고객은 누구입니까?" Orders 및 Customers 테이블에서 — DynoTable 실행이 귀하를 위해 연결됩니다. 이는 데스크톱 DynamoDB 클라이언트이며 해당 SQL Workbench는 실제 JOIN, GROUP BY 및 집계 쿼리를 실행합니다. 일반 DynamoDB API를 통해 항목을 읽은 다음 클라이언트에서 쿼리의 관계형 부분을 실행합니다. 따라서 이는 정의된 관계가 없는 테이블과 JOIN 키워드가 없는 쿼리 엔진에 대해 작동합니다.
SELECT c.name, SUM(o.total) AS spend
FROM Customers c
JOIN Orders o ON o.customerId = c.id
WHERE c.region = 'EU'
GROUP BY c.nameSQL을 작성하고 싶지 않으신가요? 스마트 테이블은 동일한 조인 엔진의 시각적 레인입니다. 캔버스에서 두 테이블 사이에 관계 선을 그리고 조인된 행을 찾아보세요.
"DynamoDB의 액세스 패턴 규칙 내에서" 정직한 주의 사항: Workbench는 여전히 DynamoDB를 통해 읽으므로 가장 빠른 조인은 ON 속성 또는 WHERE 절이 적어도 한 쪽에서 파티션 키 또는 GSI에 도달하여 DynamoDB가 전체 스캔 대신 쿼리를 실행하도록 하는 조인입니다. Workbench 동작은 /docs/dynamodb-sql-workbench, 시각적 조인 캔버스는 /docs/smart-tables를 참조하세요. DynoTable을 사용하면 코드에 직접 결과를 엮는 대신 조인 질문을 _질문_할 수 있습니다. 위의 제약 조건을 폐지하지는 않습니다. DynamoDB GUI 클라이언트 중에서 실제로는 "예, 가입할 수 있습니다"라는 말이 유일하게 사실입니다. PartiQL과 AWS의 자체 NoSQL Workbench는 모두 단일 테이블 벽에서 멈춥니다.
조인을 완전히 피하는 단일 테이블 읽기의 경우 오버로드된 키를 single-table design tool 모델을 만들기 전 관련 데이터의 비정규화된 복사본.
절충안
프로덕션 읽기 경로의 경우 읽기를 저렴하고 일정한 시간으로 만들기 위해 쓰기에 대해 더 신중한 작업을 수행합니다.
더 알아보기
DynamoDB joins, single-table design, one-to-many relationships를 읽어보세요. Download DynoTable SQL로 또는 스마트 테이블을 사용하여 시각적으로 테이블에 대해 실제 JOIN을 실행합니다.
참고 자료
- Query data in DynamoDB (SQL to NoSQL) — Amazon DynamoDB Developer Guide
- PartiQL select statements for DynamoDB — Amazon DynamoDB Developer Guide
- Best practices for NoSQL design — Amazon DynamoDB Developer Guide
위에 링크된 공식 AWS 문서를 기준으로 2026년 7월 13일에 마지막으로 확인되었습니다.
위의 ValidationException는 DynamoDB Local 3.3.0에 대해 2026-07-28에 @aws-sdk/client-dynamodb 3.1095.0을 통해 재현되었으며 그대로 인용되었습니다.