Aws lambda DynamoDB查询返回不完整的数据

Aws lambda DynamoDB查询返回不完整的数据,aws-lambda,amazon-dynamodb,Aws Lambda,Amazon Dynamodb,为什么Lambda中的查询不返回两个时间戳之间的所有内容?它始终返回相同的、不完整的数据 在DynamoDB项目资源管理器中,我可以查询最近的时间戳,并按设备查找适当的项目 当我在Lambda中查询时,大部分相同的数据丢失了 var params = { Statement : `SELECT * FROM temps WHERE "Timestamp" >= ${fromParam} AND "Timestamp" <= ${toPar

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

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

当我在Lambda中查询时,大部分相同的数据丢失了

var params = {
   Statement : `SELECT * FROM temps WHERE "Timestamp" >= ${fromParam} AND "Timestamp" <= ${toParam}`,
}
 
dynamodb.executeStatement(params, function(err, data) { ...
我的DynamoDB表如下所示:


DDB只读取注释读取,与一次返回1MB数据不同

如果您正在进行任何筛选,则返回的数据将小于1MB读取

如果有更多数据要读取,DDB将在其响应中包含LastEvaluatedKey。您需要再次调用查询,将返回的LastEvaluatedKey作为ExclusiveStartKey传入

因此,除非您能保证永远不会有超过1MB的数据要读取,否则您将希望在循环中调用Query,直到您返回所有数据

编辑 是的,如果返回nextToken,您需要在下一次通话中将其传回。。

我从未使用过execute语句,但看起来您正在进行全表扫描。而不是询问。您需要在中包含where device=in


如果你真的需要所有设备的记录,考虑将一个单独的值作为分区键和时间戳作为一个排序键添加一个GSI。然后使用TEMPS.mytsidx

我对executeStatement的不完整响应可以小到4k。我没有看到LastEvaluationKey,但我下一步会得到一个属性-相同的东西?@Joebuckman see EditThank-就是这样。我很惊讶dynamoDB能将几百条记录转换成MB的数据@Joebuckman DDB不是RDBMS,也不能像RDBMS那样使用。根据您需要如何访问数据,请参阅更新的GSI建议。