PartiQL 为 选择语句 DynamoDB - Amazon DynamoDB
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

PartiQL 为 选择语句 DynamoDB

使用 SELECT 语句可从 Amazon DynamoDB 中的表检索数据。

如果在 WHERE 子句中未提供具有分区键的等式条件,则使用 SELECT 语句会导致全表扫描。扫描操作检查每个项目是否具有请求的值,并且可以在单个操作中用尽大型表或索引的预配置吞吐量。

如果要避免在 PartiQL 中进行全表扫描,您可以:

有关更多信息,请参阅 开发人员指南中的查询和扫描数据的最佳实践DynamoDB。

Syntax

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

Parameters

expression

(必需)由 * 通配符或结果集中一个或多个属性名称或文档路径的投影列表构成的投影。表达式可以包含对 将 PartiQL 函数与 Amazon DynamoDB 结合使用 的调用或由 PartiQL 的算术、比较和逻辑运算符 DynamoDB 修改的字段。

table

(必需)要查询的表名称。

index

(可选)要查询的索引的名称。

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'
key

(可选)用于对返回的结果进行排序的哈希键或排序键。如果您希望按降序顺序重新调整结果,则默认顺序是升序 (ASC) 指定 DESC

注意

如果省略 WHERE 子句,则将检索表中的所有项目。

Examples

以下查询通过指定分区键 Orders 并使用等式运算符,从 OrderID 表返回一个项目(如果存在)。

SELECT OrderID, Total FROM Orders WHERE OrderID = 1

以下查询使用 OR 运算符返回 Orders 表中具有特定分区键 OrderID 值的所有项目。

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

以下查询使用 IN 运算符返回 Orders 表中具有特定分区键 OrderID 值的所有项目。返回的结果按照 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

以下查询显示完整的表扫描,该扫描返回特定 Orders 顺序范围内的 Total 表中的所有项目(使用 IN 运算符和非键属性 Total)。

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

以下查询显示完整的表扫描,该扫描返回特定 Orders 顺序范围内的 Total 表中的所有项目(使用 BETWEEN 运算符和非键属性 Total)。

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

以下查询显示完整的表扫描,该扫描返回了在 12/12/19 之后首次使用 Firestick 设备(使用 WHERE 子句条件中的文档路径)的项目列表。

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