当前位置: 首页 > 知识库问答 >
问题:

dynamodb查询获取超过1m的数据-请以java为例

程承恩
2023-03-14

我正在尝试运行查询并获取所有项目。似乎并不是所有的项目都被检索到,我需要使用start键再次运行查询。

从留档

对于查询或扫描操作,如果操作未返回表中的所有匹配项,DynamoDB可能会返回LastEvaluatedKey值。要获取匹配项的完整计数,请从上一个请求中获取LastEvaluatedKey值,并将其用作下一个请求中的ExclusiveStartKey值。重复此操作,直到DynamoDB不再返回LastEvaluatedKey值。

你能给出一个代码示例如何包装这段代码来使用lastEvalue atedKey再次运行查询吗?

        QuerySpec spec = new QuerySpec()
    .withKeyConditionExpression("userName = :userName and #a between :startRange and :endRange")
    .withValueMap(valueMap)
    .withScanIndexForward(false)
    .withNameMap(nameMap);

    ItemCollection<QueryOutcome> items = table.query(spec);

    Iterator<Item> iterator = items.iterator();
    while (iterator.hasNext()) { ....

谢了弗莱迪

共有1个答案

辛承
2023-03-14

看起来您使用的是DynamoDB文档API,而不是低级API。当您使用文档API进行查询时,所有低级注意事项(如分页)都将被考虑在内,但您可以选择与这些低级方面进行交互。

根据您提供的代码片段,当您到达每个页面的末尾时,文档API库将负责加载其他页面,因此您不需要做任何额外的工作,您的代码应该可以工作!这是使用文档API的真正好处,因为它为常见用例处理了大量冗余的锅炉板代码。

 类似资料:
  • 我正在尝试运行一个查询并获取所有项目。似乎没有检索到所有项目,我需要使用start键再次运行查询。 从文件中 对于Query或Scan操作,如果操作没有返回表中所有匹配的项目,DynamoDB可能会返回LastEvalatedKey值。要获取匹配项的完整计数,请从上一个请求中获取LastEvalatedKey值,并在下一个请求中将其用作ExunisiveStartKey值。重复此操作,直到Dyna

  • 当我将参数嵌入到下面的路径中时,我可以成功地传递参数 我应该使用‘参数’tabe只有当我做POST方法?我知道向JMeter传递参数是一个简单的问题,但我不能解决我的问题。

  • 我调用下面的方法来计算一些值。我提供agencyID和月份的整数表示来执行计算。 等等...直到我到达12月(值12)。然而,当我到达5月(月值5)时,代码给出了一个运行时错误。然而,奇怪的是这个错误被抛出 在我的查询中,我没有在查询中的任何位置包含shift\u dayId,如下所示: 我恳请帮助我确定为什么givenMonth在值大于4时抛出运行时异常。 谢谢你 编辑 这是我要求的ShiftD

  • 我已经尝试从DynamoDB查询数据两天了。让我发疯。 我在办公室里有一张桌子。假设有两个办公室,科克和都柏林。我有一个名为“deskName”的列,它的名称有“cork1”、“cork2”、“dub1”、“dub2”。我希望能够查询表中包含“cork”或“dub”的项目,因为它们在同一个表中,但我不想扫描整个表。 代码: YAML: 错误: 当我出现“软木塞-1”的情况时,我设法把一件物品拿了回

  • 我正在建立一个阳光应用从Udacity课程。在第2课中,我尝试将应用程序连接到OpenWeatherMap.org站点上的云,以获取城市的天气数据。首先,基本查询起作用,即URL URL=新URL(“http://api.openweathermap.org/data/2.5/forecast?id=524901&appid=c21566b1153f87e9f1d256b962cd6d42”);但

  • 我有3张桌子: 学校之间存在一对多的关系- 我正在编写查询以获取特定学校的学生: 虽然我没有在规范查询或代码中的任何地方获取主题(如使用)。 我仍然可以在生成的查询中的日志中看到主题最终被获取。 我如何更新我的查询以仅限于学校 请建议。