Amazon dynamodb DynamoDb:扫描查询不会返回所有数据
我有一个DynamoDb表格,里面有成千上万的数据。我正在使用Scan函数扫描表,并应用了“Between”过滤器表达式。 然而,查询响应只给出3条记录,而它应该返回大约100条记录Amazon dynamodb DynamoDb:扫描查询不会返回所有数据,amazon-dynamodb,aws-lambda,aws-sdk,amazon-dynamodb-streams,Amazon Dynamodb,Aws Lambda,Aws Sdk,Amazon Dynamodb Streams,我有一个DynamoDb表格,里面有成千上万的数据。我正在使用Scan函数扫描表,并应用了“Between”过滤器表达式。 然而,查询响应只给出3条记录,而它应该返回大约100条记录 我已经使用节点js创建了Lambda函数。另一个常见问题可能是在LastEvaluatedKey为空之前是否执行扫描 如果您已经这样做了,但仍然没有得到所有的项目,请显示您的代码来详细查看它 如果扫描的项目总数超过最大数据集大小 限制为1 MB时,扫描将停止并将结果返回给用户 LastEvaluatedKey值,用
我已经使用节点js创建了Lambda函数。另一个常见问题可能是在LastEvaluatedKey为空之前是否执行扫描 如果您已经这样做了,但仍然没有得到所有的项目,请显示您的代码来详细查看它 如果扫描的项目总数超过最大数据集大小 限制为1 MB时,扫描将停止并将结果返回给用户 LastEvaluatedKey值,用于在后续操作中继续扫描 活动结果还包括超过标准的项目数量 限制。扫描可能导致没有符合筛选条件的表数据 如果LastEvaluatedKey为空,则显示结果的“最后一页” 已处理,并且没有更多的数据要检索 如果LastEvaluatedKey不是空的,并不一定意味着 结果集中有更多数据。只有这样才能知道你什么时候 当LastEvaluatedKey为时,已到达结果集的末尾 空的
下面是获得所有结果的示例代码:
Map<String, AttributeValue> lastKeyEvaluated = null;
do {
ScanRequest sr = new ScanRequest()
.withTableName("tableName")
.withProjectionExpression("id")
.withExclusiveStartKey(lastKeyEvaluated);
ScanResult result = client.scan(sr);
for (Map<String, AttributeValue> item : result.getItems()) {
System.out.println(item.get("id").getS());
}
lastKeyEvaluated = result.getLastEvaluatedKey();
} while (lastKeyEvaluated != null);
Map lastKeyEvaluated=null;
做{
ScanRequest sr=新的ScanRequest()
.withTableName(“tableName”)
.带有ProjectionExpression(“id”)
.使用排他性EstartKey(lastKeyEvaluated);
ScanResult结果=客户端扫描(sr);
对于(映射项:result.getItems()){
System.out.println(item.get(“id”).get();
}
lastKeyEvaluated=result.getLastEvaluatedKey();
}while(lastKeyEvaluated!=null);
最可能的原因是筛选器表达式正在过滤掉一些值。在这种情况下,DynamoDB仍然必须扫描整个表并逐页浏览结果。每个响应将只包含与筛选条件匹配的项,以及必须在下一个请求中包含的LastEvaluateKey以继续扫描。一开始这有点不直观,但如果您仔细考虑一下,它是有意义的。要使用Node.js
从AWS Dynamodb
获取/扫描所有项目,您可以参考:请在您的答案中添加一些描述。此答案非常有用,谢谢。但是请注意,使用AWS SDK 2.0result.getLastEvaluatedKey()
返回一个空的非空映射。因此,我必须在检查时更改条件空&!空的
。