扫描表方面的差异 - Amazon DynamoDB

扫描表方面的差异

在 SQL 中,不带 SELECT 子句的 WHERE 语句将返回表中的每个行。在 Amazon DynamoDB 中,Scan 操作可执行相同的工作。在这两种情况下,您都可以检索所有项目或部分项目。

无论您使用的是 SQL 还是 NoSQL 数据库,都应谨慎使用扫描操作,因为它们会占用大量系统资源。有时,扫描是适合的 (例如,扫描小型表) 或不可避免的 (例如,执行数据的批量导出操作)。但通常来说,您应设计应用程序以避免执行扫描。有关更多信息,请参阅 在 DynamoDB 中查询表

注意

执行批量导出还将为每个分区创建至少 1 个文件。每个文件中的所有项目都来自于该特定分区的哈希密钥空间。

使用 SQL 扫描表

使用 SQL 时,您可以在不指定 SELECT 子句的情况下使用 WHERE 语句扫描表并检索其所有数据。您可以在结果中请求一个或多个列。或者,如果您使用通配符 (*),则可请求所有列。

以下是使用 SELECT 语句的示例。

/* Return all of the data in the table */ SELECT * FROM Music;
/* Return all of the values for Artist and Title */ SELECT Artist, Title FROM Music;

在 DynamoDB 中扫描表

在 Amazon DynamoDB 中,您可以使用 DynamoDB API 或 PartiQL(一种与 SQL 兼容的查询语言)对表执行扫描。

DynamoDB API

借助 DynamoDB API,您可以使用 Scan 操作来通过访问表或者二级索引中的每个项目来返回一个或多个项目和项目属性。

// Return all of the data in the table { TableName: "Music" }
// Return all of the values for Artist and Title { TableName: "Music", ProjectionExpression: "Artist, Title" }

Scan 操作还提供一个 FilterExpression 参数,您可以使用它丢弃不希望在结果中出现的项目。在执行扫描后且结果返回给您之前,应用 FilterExpression。(不建议对大表使用。即使仅返回几个匹配项目,您仍需为整个 Scan 付费。)

PartiQL for DynamoDB

使用 PartiQL,您可以通过 Select 语句来使用 ExecuteStatement 操作执行扫描,以返回表的所有内容。

SELECT AlbumTitle, Year, Price FROM Music

请注意,此语句将返回 Music 表中的所有项目。

有关使用 SelectExecuteStatement 的代码示例,请参阅 PartiQL for DynamoDB 的 Select 语句