DynamoDB의 PartiQL select 문 - Amazon DynamoDB

DynamoDB의 PartiQL select 문

SELECT 문을 사용하면 Amazon DynamoDB의 테이블에서 데이터를 검색할 수 있습니다.

SELECT 문을 사용하면 WHERE 절에 파티션 키를 사용한 등식 또는 IN 조건을 지정하지 않은 경우 전체 테이블이 스캔될 수 있습니다. 스캔 작업은 요청한 값을 찾기 위해 전체 항목을 검사하기 때문에 대용량 테이블이나 인덱스일 경우에는 단 한 번의 작업으로 프로비저닝된 처리량을 모두 사용할 수 있습니다.

PartiQL에서 전체 테이블 스캔을 방지하려면 다음과 같이 할 수 있습니다.

자세한 내용은 DynamoDB 개발자 안내서에서 데이터 쿼리 및 검색 모범 사례를 참조하세요.

구문

SELECT expression [, ...] FROM table[.index] [ WHERE condition ] [ [ORDER BY key [DESC|ASC] , ...]

파라미터

expression

(필수) * 와일드카드에서 형성된 프로젝션 또는 결과 집합에 있는 하나 이상의 속성 이름 또는 문서 경로로 구성된 프로젝션 목록입니다. expression은 Amazon 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'