在 Amazon Keyspaces 查詢中使用IN運算符與SELECT語句 - Amazon Keyspaces (適用於 Apache Cassandra)

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在 Amazon Keyspaces 查詢中使用IN運算符與SELECT語句

SELECT在

您可以使用陳述式查詢資料表中的資料,該SELECT陳述式會針對資料表中的一或多個資料列讀取一或多個資料行,並傳回包含與要求相符之資料列的結果集。SELECT陳述式包含決select_clause定要讀取哪些資料行,並在結果集中傳回。該子句可以包含在返回數據之前轉換數據的指令。可選WHERE子句指定哪些行必須查詢,並且由屬於主鍵一部分的列上的關係組成。Amazon Keyspaces 支持WHERE子句中的IN關鍵字。本節使用範例顯示 Amazon Keyspaces 如何使用IN關鍵字處理SELECT陳述式。

這個例子演示了 Amazon Keyspaces 如何將帶有IN關鍵字的SELECT語句分解為查詢。在這個例子中,我們使用的名稱表my_keyspace.customers。此資料表有一個主索引鍵資料行department_id、兩個叢集資料行sales_region_idsales_representative_id,以及一個資料行,其中包含資customer_name料行中的客戶名稱。

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 space 會在根據集合讀取要處理的查詢數目之後進行分頁。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