입문2분 분량

예제로 배우는 DynamoDB PartiQL

은 DynamoDB를 위한 SQL 호환 쿼리 언어입니다. 임시 작업에는 원시 API보다 친근하지만, 같은 엔진 위에서 돌아가므로 익숙한 문법 아래에 똑같은 키 규칙 (그리고 똑같은 비용)이 적용됩니다.

DynamoDB용 PartiQL 쿼리는 어떻게 작성하나요?

PartiQL은 DynamoDB에 SQL 모양의 문 네 가지 — SELECT, INSERT, UPDATE, DELETE — 를 주고, 이를 ExecuteStatement로 실행합니다. 각각은 아래에서 네이티브 연산으로 컴파일되므로, 로 필터링하면 Query가 되고 그것을 생략하면 테이블 전체 Scan이 됩니다. 쓰기는 여전히 로 항목 하나를 대상으로 하며, 관계형 JOIN, GROUP BY, 집계는 없습니다.

SELECT

SELECT * FROM "AppData"
WHERE "PK" = 'CUSTOMER#42' AND begins_with("SK", 'ORDER#')

로 필터링하면 이것은 Query입니다. 파티션 키를 생략하면 PartiQL은 조용히 테이블 전체 Scan을 실행합니다 — 똑같은 함정이 친근한 SELECT * 뒤에 숨어 있을 뿐입니다.

INSERT

INSERT INTO "AppData" VALUE {'PK': 'CUSTOMER#42', 'SK': 'PROFILE', 'plan': 'pro'}

UPDATE

UPDATE "AppData" SET "plan" = 'enterprise'
WHERE "PK" = 'CUSTOMER#42' AND "SK" = 'PROFILE'

DELETE

DELETE FROM "AppData"
WHERE "PK" = 'CUSTOMER#42' AND "SK" = 'ORDER#2026-001'

인덱스 쿼리하기

FROM 절에 인덱스 이름을 쓰세요.

SELECT * FROM "AppData"."GSI1" WHERE "GSI1PK" = 'STATUS#OPEN'

WHEREIN, contains(), begins_with()도 지원합니다.

SELECT * FROM "AppData"
WHERE "PK" = 'CUSTOMER#42' AND "SK" IN ['ORDER#1', 'ORDER#2']

매개변수화된 문

값을 인라인으로 넣는 대신 ? 플레이스홀더를 쓰세요 — 인용/주입 문제를 피하고 SDK가 타입을 대신 마샬링해 줍니다.

SELECT * FROM "AppData" WHERE "PK" = ? AND begins_with("SK", ?)

Parameters: [{ S: 'CUSTOMER#42' }, { S: 'ORDER#' }]ExecuteStatement에 전달하세요.

배치와 트랜잭션

  • BatchExecuteStatement — 한 번의 왕복에 최대 25개 문. 더 빠르지만 항목 간 원자성은 없습니다(각각 독립적으로 성공하거나 실패).
  • ExecuteTransaction — 최대 100개 문, 전부-아니면-전무. 여러 쓰기가 함께 커밋되어야 할 때 쓰세요.

PartiQL의 함정

PartiQL은 SQL처럼 보이지만 DynamoDB 엔진 위에서 돌아가므로, SQL 습관은 역효과를 냅니다.

  • 단일 UPDATE/DELETE는 전체 로 항목 하나를 대상으로 해야 합니다 — UPDATE … WHERE status = 'x' 같은 대량 업데이트는 없습니다(대신 배치로 루프하세요).
  • JOIN 없음, GROUP BY 없음, 집계 없음(COUNT/SUM/AVG). PartiQL 대 SQL을 참고하세요.
  • 파티션 키를 생략하면 어떤 SELECT든 테이블 전체 Scan으로 바뀝니다 — 오직 청구서로만 제한됩니다.

정말로 JOIN, GROUP BY, 또는 집계가 필요할 때, DynoTable의 SQL Workbench는 여러분이 가져온 행에 대해 이를 클라이언트 측에서 실행합니다 — PartiQL이 말하지 못하는 SQL을, DynamoDB의 액세스 패턴 규칙 안에서요.

PartiQL은 기저 데이터 타입을 바꾸지 않습니다 — 값은 여전히 DynamoDB-JSON으로 전선을 타고 흐르며, 변환기로 살펴볼 수 있습니다.

스키마 인식 자동 완성으로 PartiQL 문을 실행하고 정렬 가능한 테이블 뷰에서 결과를 훑어보려면 DynoTable을 써보세요.

업데이트됨