DynamoDB의 PartiQL select 문
SELECT
문을 사용하면 Amazon DynamoDB의 테이블에서 데이터를 검색할 수 있습니다.
SELECT
문을 사용하면 WHERE 절에 파티션 키를 사용한 등식 또는 IN 조건을 지정하지 않은 경우 전체 테이블이 스캔될 수 있습니다. 스캔 작업은 요청한 값을 찾기 위해 전체 항목을 검사하기 때문에 대용량 테이블이나 인덱스일 경우에는 단 한 번의 작업으로 프로비저닝된 처리량을 모두 사용할 수 있습니다.
PartiQL에서 전체 테이블 스캔을 방지하려면 다음과 같이 할 수 있습니다.
-
WHERE 절 조건이 적절히 구성되도록 하여 전체 테이블이 스캔되지 않도록
SELECT
문을 작성합니다. -
DynamoDB 개발자 안내서의 예: DynamoDB용 PartiQL에서 select 문은 허용하고 전체 테이블 스캔 문은 거부 단원에 지정된 IAM 정책을 사용하여 전체 테이블 스캔을 사용 중지합니다.
자세한 내용은 DynamoDB 개발자 안내서에서 데이터 쿼리 및 검색 모범 사례를 참조하세요.
구문
SELECT
expression
[, ...] FROMtable
[.index
] [ WHEREcondition
] [ [ORDER BYkey
[DESC|ASC] , ...]
파라미터
expression
-
(필수)
*
와일드카드에서 형성된 프로젝션 또는 결과 집합에 있는 하나 이상의 속성 이름 또는 문서 경로로 구성된 프로젝션 목록입니다. expression은 DynamoDB에서 PartiQL 함수 사용에 대한 호출 또는 DynamoDB용 PartiQL 산술, 비교 및 논리 연산자 에서 수정되는 필드로 구성될 수 있습니다. table
-
(필수) 쿼리할 테이블 이름입니다.
인덱스를 구축하고 배포할 것입니다
-
(선택 사항) 쿼리할 인덱스의 이름입니다.
참고
인덱스를 쿼리할 때 테이블 이름과 인덱스 이름에 큰따옴표를 추가해야 합니다.
SELECT * FROM "TableName"."IndexName"
condition
-
(선택 사항) 쿼리의 선택 기준입니다.
중요
SELECT
문이 전체 테이블 스캔이 되지 않게 하려면WHERE
절 조건에서 파티션 키를 지정해야 합니다. 등식 또는 IN 연산자를 사용합니다.예를 들어,
Orders
테이블에OrderID
파티션 키 및 키가 아닌 기타 속성(Address
등)이 있는 경우 다음 문을 사용하면 전체 테이블 스캔이 되지 않습니다.SELECT * FROM "Orders" WHERE OrderID = 100 SELECT * FROM "Orders" WHERE OrderID = 100 and Address='some address' SELECT * FROM "Orders" WHERE OrderID = 100 or pk = 200 SELECT * FROM "Orders" WHERE OrderID IN [100, 300, 234]
그러나 다음
SELECT
문을 사용하면 전체 테이블 스캔이 됩니다.SELECT * FROM "Orders" WHERE OrderID > 1 SELECT * FROM "Orders" WHERE Address='some address' SELECT * FROM "Orders" WHERE OrderID = 100 OR Address='some address'
키
-
(선택 사항) 반환된 결과를 정렬하는 데 사용할 해시 키 또는 정렬 키입니다. 기본 순서는 오름차순(
ASC
)이며, 결과가 내림차순으로 반환되게 하려면DESC
를 지정합니다.
참고
WHERE
절을 생략하면 테이블의 모든 항목이 검색됩니다.
예
다음 쿼리는 파티션 키 OrderID
를 지정하고 등식 연산자를 사용하여 Orders
테이블에서 항목 하나(있는 경우)를 반환합니다.
SELECT OrderID, Total FROM "Orders" WHERE OrderID = 1
다음 쿼리는 특정 파티션 키 OrderID
값을 OR 연산자로 지정하여 Orders
테이블에서 모든 항목을 반환합니다.
SELECT OrderID, Total FROM "Orders" WHERE OrderID = 1 OR OrderID = 2
다음 쿼리는 특정 파티션 키 OrderID
값을 IN 연산자로 지정하여 Orders
테이블에서 모든 항목을 반환합니다. 반환되는 결과는 OrderID
키 속성 값을 기준으로 내림차순으로 표시됩니다.
SELECT OrderID, Total FROM "Orders" WHERE OrderID IN [1, 2, 3] ORDER BY OrderID DESC
다음 쿼리는 Orders
테이블에서 Total
이 500보다 큰 모든 항목을 반환하는 전체 테이블 스캔을 표시합니다. 여기서 Total
은 키가 아닌 속성입니다.
SELECT OrderID, Total FROM "Orders" WHERE Total > 500
다음 쿼리는 IN 연산자와 키가 아닌 속성 Total
을 사용하여 Orders
테이블에서 특정 Total
주문 범위 내의 모든 항목을 반환하는 전체 테이블 스캔을 표시합니다.
SELECT OrderID, Total FROM "Orders" WHERE Total IN [500, 600]
다음 쿼리는 BETWEEN 연산자가 키가 아닌 속성 Total
을 사용하여 Orders
테이블에서 특정 Total
주문 범위 내의 모든 항목을 반환하는 전체 테이블 스캔을 표시합니다.
SELECT OrderID, Total FROM "Orders" WHERE Total BETWEEN 500 AND 600
다음 쿼리는 WHERE 절 조건에 파키션 키 CustomerID
및 정렬 키 MovieID
를 지정하고 SELECT 절에 문서 경로를 사용하여 파이어스틱 디바이스를 사용해 시청한 첫 번째 날짜를 반환합니다.
SELECT Devices.FireStick.DateWatched[0] FROM WatchList WHERE CustomerID= 'C1' AND MovieID= 'M1'
다음 쿼리는 WHERE 절 조건에 문서 경로를 사용하여 2019년 12월 24일 이후 파이어스틱 디바이스가 처음 사용된 항목 목록을 반환하는 전체 테이블 스캔을 표시합니다.
SELECT Devices FROM WatchList WHERE Devices.FireStick.DateWatched[0] >= '12/24/19'