適用於 DynamoDB 的 PartiQL Select 陳述式 - Amazon DynamoDB

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

適用於 DynamoDB 的 PartiQL Select 陳述式

在 Amazon DynamoDB 中,使用 SELECT 陳述式從資料表檢索資料。

如果 WHERE 子句中未提供具有分區索引鍵的相等或 IN 條件,使用SELECT陳述式可能會導致完整資料表掃描。掃描操作會檢查每個項目的要求值,並可能會在單一操作中耗用大型資料表或索引的佈建輸送量。

如果您想避免在 PartiQL 中進行完整的資料表掃描,則可以:

如需詳細資訊,請參閱《DynamoDB 開發人員指南》中的查詢和掃描資料的最佳實務

語法

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

參數

運算式

(必要) 從 * 萬用字元形成的投影,或來自結果集中一或多個屬性名稱或文件路徑的投影清單。一個表達式可以包含對 搭配 DynamoDB 使用 PartiQL 函數 的呼叫或由 適用於 DynamoDB 的 PartiQL 算術、比較和邏輯運算子 修改的欄位。

表格

(必要) 要查詢的資料表名稱。

索引

(選用) 要查詢的索引名稱。

注意

查詢索引時,必須在資料表名稱和索引名稱上加上雙引號。

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 和值的 Orders 資料表,使用 OR 運算子傳回其中的所有項目。

SELECT OrderID, Total FROM "Orders" WHERE OrderID = 1 OR OrderID = 2

下列查詢會針對具有特定分割區索引鍵、OrderID 和值的 Orders 資料表,使用 IN 運算子傳回其中的所有項目。傳回的結果會根據 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 之特定 Total 順序範圍內 Orders 資料表中的所有項目。

SELECT OrderID, Total FROM "Orders" WHERE Total IN [500, 600]

下列查詢顯示完整的資料表掃描,該掃描會傳回使用 BETWEEN 運算子和非索引鍵屬性 Total 之特定 Total 順序範圍內 Orders 資料表中的所有項目。

SELECT OrderID, Total FROM "Orders" WHERE Total BETWEEN 500 AND 600

下列查詢會在 WHERE 子句條件中指定分割區索引鍵 CustomerID 和排序索引鍵 MovieID,並在 SELECT 子句中使用文件路徑,以此傳回 FireStick 裝置用於觀看的第一個日期。

SELECT Devices.FireStick.DateWatched[0] FROM WatchList WHERE CustomerID= 'C1' AND MovieID= 'M1'

下列查詢會顯示完整的資料表掃描,該掃描會使用 WHERE 子句條件中的文件路徑傳回在 2019 年 12 月 24 日之後首次使用 FireStick 裝置的項目清單。

SELECT Devices FROM WatchList WHERE Devices.FireStick.DateWatched[0] >= '12/24/19'