如何在对 aws dynamodb 表的查询中获取所有结果?
Posted
技术标签:
【中文标题】如何在对 aws dynamodb 表的查询中获取所有结果?【英文标题】:How to get all results in a query to a aws dynamodb table? 【发布时间】:2016-05-07 01:41:30 【问题描述】:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryingJavaDocumentAPI.html 中给出的第一个示例返回一个 ItemCollection 根据http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#Pagination,我们需要获取 lastevaluatedkey 并再次执行查询,但是从 dynamoDb.getTable("tableName").query(keyattribute) 返回的 ItemCollection 没有任何 getlastevaluatedkey ItemCollection 文档还指出,如果遍历页面边界,将进行 n/w 调用,所以我们是否必须再次调用,直到 http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#Pagination 中给出的那样
【问题讨论】:
【参考方案1】:获得地图后,您可以进一步处理返回的数据。例如,在本例中,键名和数据被压入两个 ArrayList 对象中:
ArrayList<String> keys = new ArrayList<String>();
ArrayList<String> keyVals = new ArrayList<String>();
for (Map<String, AttributeValue> item : result.getItems())
Set<String> key = item.keySet();
Collection<AttributeValue> values = item.values();
for (Iterator<String> it = key.iterator(); it.hasNext(); )
String f = it.next();
System.out.println(f);
keys.add(f);
for (Iterator<AttributeValue> it2 = values.iterator(); it2.hasNext(); )
AttributeValue v1 = it2.next();
String yy= v1.getS();
keyVals.add(yy);
然后你可以对返回的数据做你需要做的事情
【讨论】:
【参考方案2】:getLastEvaluatedKey 是QueryResult(或ScanResult)的方法。
在您引用的示例中,使用了 QueryOutcome 的集合,绕过了 QueryResult。 要获取最后评估的密钥,您可以尝试这样做
QueryRequest request = new QueryRequest();
request.setTableName(tablename);
QueryResult result = dynamoDB.query(request);
ItemCollection<QueryOutcome> items = result.getItems();
Map<String,AttributeValue> lastKey = result.getLastEvaluatedKey();
我希望这会有所帮助。
【讨论】:
以上是关于如何在对 aws dynamodb 表的查询中获取所有结果?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 aws 控制台将 dynamoDB 表的全部记录导出到 CSV?