我正在尝试从DynamoDB表中获取这些项,以便将它们放入csv文件中。代码如下:
ArrayList<String> ids = new ArrayList<String>();
ScanResult result = null;
do{
ScanRequest req = new ScanRequest();
req.setTableName("table");
req.withLimit(10);
if(result != null){
req.setExclusiveStartKey(result.getLastEvaluatedKey());
}
AmazonDynamoDBClient client = new AmazonDynamoDBClient(awsCreds);
result = client.scan(req);
List<Map<String, AttributeValue>> rows = result.getItems();
for(Map<String, AttributeValue> map : rows){
try{
AttributeValue v = map.get("prod_number");
String id = v.getS();
ids.add(id);
} catch (NumberFormatException e){
System.out.println(e.getMessage());
}
}
} while(result.getLastEvaluatedKey() != null);
System.out.println("Result size: " + ids.size());我想知道为什么'req.withLimit(10)‘对结果数量没有影响。查询仍会尝试获取所有记录。
发布于 2020-06-11 21:19:08
ScanRequest means的limit属性
要评估的最大项目数(不一定是匹配的项目数)。如果在处理结果时DynamoDB处理的项数达到限制,它将停止操作并返回到该点之前的匹配值,以及
LastEvaluatedKey中要在后续操作中应用的键,以便您可以从停止的位置继续操作。此外,如果在DynamoDB达到此限制之前处理的数据集大小超过1 MB,它将停止操作并返回达到此限制的匹配值,并返回LastEvaluatedKey中要在后续操作中应用的键以继续操作。有关更多信息,请参阅亚马逊DynamoDB开发人员指南中的Working with Queries。
因此,它只限制单个请求返回的部分数据的大小,而不是整个扫描操作的大小。我看到你在做多个请求,所以你会得到更多的数据。
https://stackoverflow.com/questions/62186247
复制相似问题