DynamoDB는 SQL을 지원합니까?
부분적으로. DynamoDB는 SELECT, INSERT, UPDATE 및 DELETE 문에 대한 SQL 호환 쿼리 언어인 PartiQL을 지원합니다. 이는 전체 SQL이 아닙니다. JOIN, GROUP BY 및 임의 집계가 없으며 효율적인 쿼리에는 여전히 기본 키 또는 인덱스를 대상으로 해야 합니다. 누락된 부분이 필요한 경우 DynoTable의 SQL Workbench는 실제 JOIN, GROUP BY를 실행하고 데스크톱에서 DynamoDB 테이블에 대한 집계 쿼리를 실행합니다.
PartiQL이 제공하는 것
네 가지 데이터 작업에 대한 친숙한 SQL 구문입니다. 하위 수준 API 호출을 구성하는 대신 편리하고 읽기 쉬운 SELECT * FROM "Orders" WHERE ...을 작성할 수 있습니다.
그것이 당신에게 제공하지 않는 것
- 조인 없음 — DynamoDB는 비관계형입니다. 대신 비정규화합니다.
- GROUP BY/집계 없음 — 애플리케이션에서 그룹화 및 합산이 발생합니다.
- 저렴한 자유 형식 스캔 없음 — 주요 조건이 없는
SELECT는 여전히 스캔을 실행하고 그에 따라 비용이 청구됩니다.
파서가 멈추는 곳
이는 다른 구문으로 도달할 수 있는 기능이 아닙니다. 이를 실행하면 명령문은 항목을 읽는 데까지 도달하지 않습니다.
SELECT "region", SUM("total") FROM "Orders" GROUP BY "region"
ValidationException: Unsupported clause: GROUP BY
SELECT COUNT(*) FROM "Orders"
ValidationException: Unexpected path component at 1:8:5
SELECT SUM("total") FROM "Orders"
ValidationException: Unexpected path component at 1:8:3
SELECT DISTINCT "region" FROM "Orders"
ValidationException: Unsupported token in expression: DISTINCT집계 오류가 무엇을 말하는지 살펴보십시오. 파서가 거절할 집계 함수가 없으므로 COUNT(*)는 속성 경로로 읽혀지고 8열의 *에 넘어갑니다. 그만큼 SQL 표면이 얇습니다.
ORDER BY는 작동하는 것처럼 보이기 때문에 알아야 할 것입니다.
SELECT * FROM "Orders" WHERE "pk" = 'U#1' ORDER BY "total"
ValidationException: Variable reference total in ORDER BY clause must be part of the primary key정렬 키를 기준으로 오름차순 또는 내림차순으로 정렬할 수 있으며 다른 기준으로는 정렬할 수 없습니다. 읽은 후에는 다른 속성을 기준으로 정렬하는 것이 애플리케이션의 작업입니다.
정신 모델
PartiQL을 DynamoDB의 기존 쿼리, 스캔 및 쓰기 작업에 대한 구문 계층으로 생각하십시오. 동일한 액세스 패턴 규칙이 아래에 적용됩니다.
DynoTable을 사용한 실제 SQL(JOIN, GROUP BY, 집계)
PartiQL은 단일 테이블 SELECT에서 중지됩니다. DynoTable의 SQL Workbench는 더 나아가 DynamoDB 테이블에 대해 실제 JOIN, GROUP BY 및 집계 함수(COUNT, SUM, AVG, MIN, MAX)를 실행합니다. 일반 DynamoDB API를 통해 항목을 읽은 다음 클라이언트에서 쿼리의 관계형 부분인 SQL을 DynamoDB의 액세스 패턴 규칙 내에서 실행합니다. 각 조인은 여전히 실제 키나 인덱스를 통해 읽기 때문입니다. 따라서 PartiQL이 수행할 수 없는 세 가지 작업을 하나의 명령문으로 작성합니다.
SELECT c.region, COUNT(*) AS orders, SUM(o.total) AS revenue
FROM Orders o
JOIN Customers c ON o.customerId = c.id
GROUP BY c.region기본 제약 조건에 대해 정직하게 유지하므로(무제한 조인은 무제한 읽기임) 가장 빠른 쿼리는 조인 또는 WHERE가 파티션 키 또는 인덱스에 도달하는 쿼리입니다. 자세한 내용은 SQL for DynamoDB에, 제품 설명서는 /docs/dynamodb-sql-workbench에 있습니다.
동일한 데이터 모델의 PartiQL 측면을 프로토타입화합니다.
DynamoDB query builder — 파티션 범위를 내보냅니다.
Query 프로그램은 키가 입력될 때 PartiQL SELECT가 사용하는 효율적인 경로를 유지합니다.
상태가 존재합니다.
더 알아보기
PartiQL vs SQL의 두 개를 비교하고, PartiQL examples을 보고, SQL for DynamoDB를 읽으세요. Download DynoTable을 사용하여 PartiQL을 작성하고 실제 JOIN, GROUP BY 및 집계를 테이블에 작성합니다.
참고 자료
- PartiQL - a SQL-compatible query language for Amazon DynamoDB — Amazon DynamoDB Developer Guide
- PartiQL select statements for DynamoDB — Amazon DynamoDB Developer Guide
- Query data in DynamoDB (SQL to NoSQL) — Amazon DynamoDB Developer Guide
위에 링크된 공식 AWS 문서를 기준으로 2026년 7월 13일에 마지막으로 확인되었습니다.
위의 모든 ValidationException는 DynamoDB Local 3.3.0에서 @aws-sdk/client-dynamodb 3.1095.0을 통해 2026-07-28에 재현되었으며 열 오프셋을 포함하여 그대로 인용되었습니다.