如何在对 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?

在 AWS Amplify GraphQL DynamoDB 中按另一个表的字段(也称为交叉表或嵌套过滤)过滤列表查询

获取 DynamoDB / AWS 生态系统中的热门帖子

AWS DynamoDB批量获取请求 - iOS

AWS IoT DynamoDB创建规则

如何使用 AWS Lambda 按名称查询 dynamoDB 表