我正在运行一个示例java程序来查询一个dynamodb表,该表有大约90000个项目但是当我从java获得扫描计数时它只显示了1994个项目
ScanRequest scanRequest = new ScanRequest().withTableName(tableName);
ScanResult result = client.scan(scanRequest);
System.out.println("#items:" + result.getScannedCount());
程序输出#items:1994 但亚马逊aws控制台的细节显示:
项目数*:89249
任何想法? 感谢
答案 0 :(得分:5)
扫描或查询dynamodb仅返回最多1MB的数据。 计数是适合1MB的退货项目数。为了获得整个表,您应该积极地扫描数据库,直到值LastEvaluatedKey为空
答案 1 :(得分:4)
使用正确的哈希键值设置book对象,并使用DynamoDBMapper获取计数。
DynamoDBQueryExpression<Book> queryExpression = new DynamoDBQueryExpression<Book>()
.withHashKeyValues(book);
dynamoDbMapper.count(Book.class, queryExpression);
答案 2 :(得分:1)
这应该有所帮助。为我工作
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard()
.withRegion("your region").build();
DynamoDB dynamoDB = new DynamoDB(client);
TableDescription tableDescription = dynamoDB.getTable("table name").describe();
tableDescription.getItemCount();
答案 3 :(得分:0)
根据nightograph
private ArrayList<String> fetchItems() {
ArrayList<String> ids = new ArrayList<>();
ScanResult result = null;
do {
ScanRequest req = new ScanRequest();
req.setTableName("table_name");
if (result != null) {
req.setExclusiveStartKey(result.getLastEvaluatedKey());
}
result = amazonDynamoDBClient.scan(req);
List<Map<String, AttributeValue>> rows = result.getItems();
for (Map<String, AttributeValue> map : rows) {
AttributeValue v = map.get("rangeKey");
String id = v.getS();
ids.add(id);
}
} while (result.getLastEvaluatedKey() != null);
System.out.println("Result size: " + ids.size());
return ids;
}
答案 4 :(得分:-3)
我同意了夜视仪。我认为这个链接很有用。
http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html
我刚用这个例子测试过。无论如何这是Dyanamodb v2。
final ScanRequest scanRequest = new ScanRequest()
.withTableName("table_name");
final ScanResult result = dynamoDB.scan(scanRequest);
return result.getCount();