DynamoDB 查询 Returns 不完整的数据

DynamoDB Query Returns Incomplete Data

为什么我在 Lambda 中的查询不是 return 两个时间戳之间的所有内容?它始终 return 相同的、不完整的数据。

在 DynamoDB 项目资源管理器中,我可以查询最近的时间戳并按设备找到合适的项目。

当我在我的 Lambda 中查询时,很多相同的数据都丢失了。

var params = {
   Statement : `SELECT * FROM temps WHERE "Timestamp" >= ${fromParam} AND "Timestamp" <= ${toParam}`,
}
 
dynamodb.executeStatement(params, function(err, data) { ...

我的 DynamoDB table 看起来像这样:

DDB一次只会读取(注意读取,与return不一样)1MB的数据。

如果您正在执行任何过滤,那么 returned 数据将小于读取的 1MB。

如果有更多数据要读取,DDB 将在其响应中包含 LastEvaluatedKey。您需要再次调用 Query() 将 returned LastEvaluatedKey 作为 ExclusiveStartKey

因此,除非您可以保证永远不会有超过 1MB 的数据可供读取,否则您需要循环调用 Query() 直到您取回所有数据。

编辑
是的,如果 nextToken 是 returned,您需要在下一次调用时将其传回。

我从未使用过 execute 语句,但您似乎正在执行完整的 table 扫描。而不是查询。您需要在 order to use query behind the scenes.

中包含一个 where device =

如果您确实需要所有设备的记录,请考虑添加一个 GSI,其中单个值作为分区键,时间戳作为排序键。然后使用 FROM TEMPS.mytsidx