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
为什么我在 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