Amazon Keyspaces에서 쿼리로 작업하기 - Amazon Keyspaces(Apache Cassandra용)

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon Keyspaces에서 쿼리로 작업하기

이 섹션에서는 Amazon Keyspaces(Apache Cassandra용)에서 쿼리 작업 작업을 수행하는 방법을 소개합니다. 데이터를 쿼리, 변환 및 관리하는 데 사용할 수 있는 CQL 문은 SELECT, INSERT, UPDATEDELETE입니다. 다음 주제에서는 쿼리 작업 시 사용할 수 있는 보다 복잡한 몇 가지 옵션에 대해 설명합니다. 예제를 포함한 전체 언어 구문은 Amazon Keyspaces의 DML 문(데이터 조작 언어) 섹션을 참조하세요.

Amazon Keyspaces에서 SELECT 문과 함께 IN 연산자 사용

SELECT IN

SELECT 문을 사용하여 테이블의 데이터를 쿼리할 수 있습니다. 문은 테이블에서 하나 이상의 행에 대해 하나 이상의 열을 읽고 요청과 일치하는 행이 포함된 결과 집합을 반환합니다. SELECT 문에는 읽고 결과 집합에서 반환할 열을 결정하는 select_clause가 포함되어 있습니다. 절에는 데이터를 반환하기 전에 데이터를 변환하는 지침이 포함될 수 있습니다. 선택적 WHERE 절은 쿼리해야 하는 행을 지정하며 프라이머리 키의 일부인 열에 대한 관계로 구성됩니다. Amazon Keyspaces는 WHERE 절의 IN 키워드를 지원합니다. 이 섹션에서는 예제를 사용하여 Amazon Keyspaces가 IN 키워드로 SELECT 문을 처리하는 방법을 보여 줍니다.

이 예제는 Amazon Keyspaces가 IN 키워드가 포함된 SELECT 문을 하위 쿼리로 분류하는 방법을 보여 줍니다. 이 예제에서는 이름이 my_keyspace.customers인 테이블을 사용합니다. 테이블에는 프라이머리 키 열 department_id 1개, 클러스터링 열 sales_region_idsales_representative_id 2개, customer_name 열에 고객 이름이 포함된 열 1개가 있습니다.

SELECT * FROM my_keyspace.customers; department_id | sales_region_id | sales_representative_id | customer_name ---------------+-----------------+-------------------------+-------------- 0 | 0 | 0 | a 0 | 0 | 1 | b 0 | 1 | 0 | c 0 | 1 | 1 | d 1 | 0 | 0 | e 1 | 0 | 1 | f 1 | 1 | 0 | g 1 | 1 | 1 | h

이 테이블을 사용하면 다음 SELECT 문을 실행하여 WHERE 절의 IN 키워드로 관심 있는 부서 및 판매 리전의 고객을 찾을 수 있습니다. 다음 문은 이에 대한 예입니다.

SELECT * FROM my_keyspace.customers WHERE department_id IN (0, 1) AND sales_region_id IN (0, 1);

Amazon Keyspaces는 다음 출력과 같이 이 문을 네 개의 하위 쿼리로 나눕니다.

SELECT * FROM my_keyspace.customers WHERE department_id = 0 AND sales_region_id = 0; department_id | sales_region_id | sales_representative_id | customer_name ---------------+-----------------+-------------------------+-------------- 0 | 0 | 0 | a 0 | 0 | 1 | b SELECT * FROM my_keyspace.customers WHERE department_id = 0 AND sales_region_id = 1; department_id | sales_region_id | sales_representative_id | customer_name ---------------+-----------------+-------------------------+-------------- 0 | 1 | 0 | c 0 | 1 | 1 | d SELECT * FROM my_keyspace.customers WHERE department_id = 1 AND sales_region_id = 0; department_id | sales_region_id | sales_representative_id | customer_name ---------------+-----------------+-------------------------+-------------- 1 | 0 | 0 | e 1 | 0 | 1 | f SELECT * FROM my_keyspace.customers WHERE department_id = 1 AND sales_region_id = 1; department_id | sales_region_id | sales_representative_id | customer_name ---------------+-----------------+-------------------------+-------------- 1 | 1 | 0 | g 1 | 1 | 1 | h

IN 키워드를 사용하면 Amazon Keyspaces는 다음과 같은 경우에 결과를 자동으로 페이지로 나눕니다.

  • 10회마다 하위 쿼리가 처리된 후

  • 1MB의 논리적 IO를 처리한 후

  • PAGE SIZE를 구성한 경우 Amazon Keyspaces는 집합 PAGE SIZE를 기반으로 처리할 쿼리 수를 읽은 후 페이지를 매깁니다.

  • LIMIT 키워드를 사용하여 반환되는 행 수를 줄이면 Amazon Keyspaces는 집합 LIMIT를 기반으로 처리할 쿼리 수를 읽은 후 페이지를 매깁니다.

다음 테이블은 예제를 통해 이를 설명하는 데 사용됩니다.

페이지 매김에 대한 자세한 내용은 Amazon Keyspaces의 결과 페이지 매김 섹션을 참조하세요.

SELECT * FROM my_keyspace.customers; department_id | sales_region_id | sales_representative_id | customer_name ---------------+-----------------+-------------------------+-------------- 2 | 0 | 0 | g 2 | 1 | 1 | h 2 | 2 | 2 | i 0 | 0 | 0 | a 0 | 1 | 1 | b 0 | 2 | 2 | c 1 | 0 | 0 | d 1 | 1 | 1 | e 1 | 2 | 2 | f 3 | 0 | 0 | j 3 | 1 | 1 | k 3 | 2 | 2 | l

이 테이블에서 다음 문을 실행하여 페이지 매김의 작동 방식을 확인할 수 있습니다.

SELECT * FROM my_keyspace.customers WHERE department_id IN (0, 1, 2, 3) AND sales_region_id IN (0, 1, 2) AND sales_representative_id IN (0, 1);

Amazon Keyspaces는 이 문을 24개의 하위 쿼리로 처리합니다. 이 쿼리에 포함된 모든 IN 용어의 Cartesian 제품의 카디널리티가 24이기 때문입니다.

department_id | sales_region_id | sales_representative_id | customer_name ---------------+-----------------+-------------------------+-------------- 0 | 0 | 0 | a 0 | 1 | 1 | b 1 | 0 | 0 | d 1 | 1 | 1 | e ---MORE--- department_id | sales_region_id | sales_representative_id | customer_name ---------------+-----------------+-------------------------+-------------- 2 | 0 | 0 | g 2 | 1 | 1 | h 3 | 0 | 0 | j ---MORE--- department_id | sales_region_id | sales_representative_id | customer_name ---------------+-----------------+-------------------------+-------------- 3 | 1 | 1 | k

이 예제는 IN 키워드와 함께 SELECT 문에서 ORDER BY 절을 사용하는 방법을 보여 줍니다.

SELECT * FROM my_keyspace.customers WHERE department_id IN (3, 2, 1) ORDER BY sales_region_id DESC; department_id | sales_region_id | sales_representative_id | customer_name ---------------+-----------------+-------------------------+-------------- 3 | 2 | 2 | l 3 | 1 | 1 | k 3 | 0 | 0 | j 2 | 2 | 2 | i 2 | 1 | 1 | h 2 | 0 | 0 | g 1 | 2 | 2 | f 1 | 1 | 1 | e 1 | 0 | 0 | d

하위 쿼리는 쿼리에 파티션 키 및 클러스터링 키 열이 표시된 순서대로 처리됩니다. 아래 예제에서는 파티션 키 값 ”2“에 대한 하위 쿼리가 먼저 처리된 다음 파티션 키 값 ”3“ 및 ”1“에 대한 하위 쿼리가 처리됩니다. 지정된 하위 쿼리의 결과는 쿼리의 정렬 절(있는 경우) 또는 테이블 생성 중에 정의된 테이블의 클러스터링 순서에 따라 정렬됩니다.

SELECT * FROM my_keyspace.customers WHERE department_id IN (2, 3, 1) ORDER BY sales_region_id DESC; department_id | sales_region_id | sales_representative_id | customer_name ---------------+-----------------+-------------------------+-------------- 2 | 2 | 2 | i 2 | 1 | 1 | h 2 | 0 | 0 | g 3 | 2 | 2 | l 3 | 1 | 1 | k 3 | 0 | 0 | j 1 | 2 | 2 | f 1 | 1 | 1 | e 1 | 0 | 0 | d

Amazon Keyspaces의 결과 순서 지정

ORDER BY 절은 SELECT 문에서 반환된 결과의 정렬 순서를 지정합니다. 문은 열 이름 목록을 인수로 취하며 각 열에 대해 데이터의 정렬 순서를 지정할 수 있습니다. 순서 지정 절에는 클러스터링 열만 지정할 수 있으며 클러스터링이 아닌 열은 허용되지 않습니다.

반환된 결과에 대한 두 가지 사용 가능한 정렬 순서 옵션은 ASC(오름차순)와 DESC(내림차순) 정렬 순서입니다.

SELECT * FROM my_keyspace.my_table ORDER BY (col1 ASC, col2 DESC, col3 ASC); col1 | col2 | col3 ------+------+------ 0 | 6 | a 1 | 5 | b 2 | 4 | c 3 | 3 | d 4 | 2 | e 5 | 1 | f 6 | 0 | g
SELECT * FROM my_keyspace.my_table ORDER BY (col1 DESC, col2 ASC, col3 DESC); col1 | col2 | col3 ------+------+------ 6 | 0 | g 5 | 1 | f 4 | 2 | e 3 | 3 | d 2 | 4 | c 1 | 5 | b 0 | 6 | a

쿼리 문에 정렬 순서를 지정하지 않으면 클러스터링 열의 기본 순서가 사용됩니다.

순서 지정 절에서 사용할 수 있는 정렬 순서는 테이블 생성 시 각 클러스터링 열에 할당된 정렬 순서에 따라 달라집니다. 쿼리 결과는 테이블 생성 시 모든 클러스터링 열에 정의된 순서로만 정렬하거나 정의된 정렬 순서의 역순으로 정렬할 수 있습니다. 다른 가능한 조합은 허용되지 않습니다.

예를 들어 테이블의 CLUSTERING ORDER가 (col1 ASC, col2 DESC, col3 ASC)인 경우 ORDER BY에 대한 유효한 매개변수는 (col1 ASC, col2 DESC, col3 ASC) 또는 (col1 DESC, col2 ASC, col3 DESC)입니다. CLUSTERING ORDER에 대한 자세한 내용은 CREATE TABLE 아래의 table_options 섹션을 참조하세요.

Amazon Keyspaces의 결과 페이지 매김

Amazon Keyspaces는 SELECT 문을 처리하기 위해 읽은 데이터가 1MB를 초과하는 경우 SELECT 문의 결과를 자동으로 페이지 매김합니다. 페이지를 매기면 SELECT 문 결과는 크기가 1MB 이하인 데이터 ‘페이지’로 분리됩니다. 애플리케이션은 결과의 첫 번째 페이지를 처리한 다음 두 번째 페이지를 처리하고 이런 식으로 계속할 수 있습니다. 클라이언트는 여러 행을 반환하는 SELECT 쿼리를 처리할 때 항상 페이지 매김 토큰을 확인해야 합니다.

클라이언트가 1MB 이상의 데이터를 읽어야 하는 PAGE SIZE를 제공하는 경우 Amazon Keyspaces는 1MB 데이터 읽기 증분에 따라 결과를 여러 페이지로 자동 분할합니다.

예를 들어 행의 평균 크기가 100KB이고 PAGE SIZE를 20으로 지정하는 경우 Amazon Keyspaces는 10개 행(1000KB의 데이터 읽기)을 읽은 후 자동으로 데이터를 페이지 매깁니다.

Amazon Keyspaces는 결과 세트에 반환된 행 수가 아니라 요청을 처리하기 위해 읽는 행 수를 기준으로 결과 페이지를 매기기 때문에 필터링된 쿼리를 실행하는 경우 일부 페이지에는 행이 포함되지 않을 수 있습니다.

예를 들어 PAGE SIZE를 10으로 설정하고 Keyspaces가 30개의 행을 평가하여 SELECT 쿼리를 처리하면 Amazon Keyspaces는 세 페이지를 반환합니다. 행의 하위 집합만 쿼리와 일치하는 경우 일부 페이지의 행이 10개 미만일 수 있습니다.