翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon Keyspaces でクエリの SELECT
ステートメントで IN
演算子を使用する
SELECT IN
ステートメントを使用してテーブルからデータをクエリできます。SELECT
ステートメントは、テーブル内の 1 つ以上の行の 1 つ以上の列を読み取り、リクエストに一致する行を含む結果セットを返します。SELECT
ステートメントには、結果セットで読み取る列と返す列を決定する select_clause
が含まれています。この句には、データを返す前に変換する命令を含めることができます。オプションの WHERE
句は、どの行をクエリする必要があるかを指定するもので、主キーの一部である列のリレーションで構成されます。Amazon Keyspaces は、WHERE
句内の IN
キーワードをサポートしています。このセクションでは、例を使用して、Amazon Keyspaces がIN
キーワードを含む SELECT
ステートメントを処理する方法を示します。
この例は、Amazon Keyspaces が IN
キーワードを含む SELECT
ステートメントをサブクエリに分割する方法を示しています。この例では、my_keyspace.customers
という名前のテーブルを使用しています。このテーブルには、プライマリキー列が 1 つ (department_id
)、クラスタリング列とが 2 つ (sales_region_id
および sales_representative_id
)、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 は、以下の出力に示しているように、このステートメントを 4 つのサブクエリに分割しています。
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 回目ごとにサブクエリが処理されます。
1 MB の論理 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
用語のデカルト積の基数が 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