DynamoDb:扫描查询不会返回所有数据

问题描述 投票:2回答:2

我有一个包含数千个数据的DynamoDb表。我正在使用扫描功能扫描表格,我已经应用了“Between”FilterExpression。但是,查询响应仅提供3条记录,而它应返回约100条记录。

我使用Node js创建了Lambda函数。

amazon-dynamodb aws-lambda aws-sdk amazon-dynamodb-streams
2个回答
6
投票

另一个常见问题可能是在LastEvaluatedKey为空之前是否执行扫描。

如果您已经这样做但仍未获得所有项目,请显示您的代码以详细查看。

如果扫描项目的总数超过最大数据集大小限制1 MB,则扫描将停止,并将结果作为LastEvaluatedKey值返回给用户,以在后续操作中继续扫描。结果还包括超出限制的项目数。扫描可能导致没有符合过滤条件的表数据。

如果LastEvaluatedKey为空,则表示已处理结果的“最后一页”,并且不再需要检索数据。

如果LastEvaluatedKey不为空,则不一定意味着结果集中有更多数据。知道何时到达结果集的结尾的唯一方法是LastEvaluatedKey为空。


0
投票

以下是获取所有结果的示例代码:

 Map<String, AttributeValue> lastKeyEvaluated = null;
    do {
        ScanRequest sr = new ScanRequest()
                .withTableName("tableName")
                .withProjectionExpression("id")
                .withExclusiveStartKey(lastKeyEvaluated);
        ScanResult result = client.scan(sr);
        for (Map<String, AttributeValue> item : result.getItems()) {
            System.out.println(item.get("id").getS());
        }
        lastKeyEvaluated = result.getLastEvaluatedKey();
    } while (lastKeyEvaluated != null);
© www.soinside.com 2019 - 2024. All rights reserved.