PartiQL for DynamoDB 的 Select 语句 - Amazon DynamoDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

PartiQL for DynamoDB 的 Select 语句

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

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

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

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

语法

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

参数

expression

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

table

(必需)要查询的表名。

index

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

注意

查询索引时,必须在表名和索引名称中添加双引号。

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

以下查询使用 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

以下查询显示一个全表扫描,使用 IN 运算符和非键属性 Total 返回 Orders 表特定 Total 订单范围内的所有项目。

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

以下查询显示一个全表扫描,使用 BETWEEN 运算符和非键属性 Total 返回 Orders 表特定 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'

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

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