我试图从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)'对结果的数量没有影响。查询仍然试图获取所有的记录,我想知道为什么'req.withLimit(10)'对结果的数量没有影响。
的 limit
的财产 ScanRequest
途径:
评估的最大项数(不一定是匹配项数)。如果DynamoDB在处理结果的同时,将项目数处理到极限,则停止操作,并返回截至该点的匹配值,并在
LastEvaluatedKey
来应用在后续的操作中,这样你就可以从你离开的地方开始。另外,如果在DynamoDB达到这个限制之前,处理的数据集大小超过了1 MB,它就会停止操作,并返回限制以内的匹配值,并且在LastEvaluatedKey
在后续操作中应用,以继续操作。更多信息,请参见 使用查询 在 亚马逊DynamoDB开发指南.
所以,它只限制了单次请求返回的一部分数据的大小,而不是整个扫描操作。而且我看你是在进行多次请求,所以你会得到更多的数据。