【问题标题】:AWS DynamoDb read BatchRead using DynamoDbEnhancedClientAWS DynamoDb 使用 DynamoDbEnhancedClient 读取 BatchRead
【发布时间】:2023-04-07 09:17:01
【问题描述】:
BatchGetResultPageIterable batchResults = dynamoDbEnhancedClient
    .batchGetItem(BatchGetItemEnhancedRequest.builder()
    .readBatches(ReadBatch.builder(Analysis.class).mappedTableResource(analysisTable)
        .addGetItem(GetItemEnhancedRequest.builder()
        .key(Key.builder().partitionValue(projectId).build()).build())
    .build())
.build());
batchResults.forEach(page -> page.resultsForTable(analysisTable)
                .forEach(item -> System.out.println(item.getFileId())));

我用过上面那个..但我正面临这个问题 software.amazon.awssdk.services.dynamodb.model.DynamoDbException:提供的关键元素与架构不匹配(服务:DynamoDb,状态代码:400,请求 ID:36V6D9GAGEUA817ODOGV52PF6VVV4KQNAO5AEMVJF66Q9ASUAAJG)

AnalysisTable
=================
PartitionKey    Sort Key   Name
A===============>1.txt=====>ABC              
A===============>2.txt=====>DEF
A===============>3.txt=====>GHI
A===============>4.txt=====>JKL
class Analysis {
    private String projectId;
    private String sampleId;
    private String sampleName;
    private String description;
    //setter & getters
}

【问题讨论】:

  • 您能否发布您尝试查询的表的架构以及您正在使用的更多代码?该错误表明您没有正确查询表。
  • 对不起,我已经添加了架构。

标签: java amazon-web-services amazon-dynamodb


【解决方案1】:

由于您有分区和排序键,我认为您在 Key.builder() 中缺少 .sortValue()

必须是Key.builder().partitionValue(projectId).sortValue(your-sort-key).build()

【讨论】:

  • 假设所有条目都在 DynamoDB 中,我怎么知道我的排序键是什么?当我实际上从表中获取值时。而且排序是不同的。它不一样。如果我错了,请纠正我。
  • 这是一个公平的标注。我的错。我在想你需要确切的项目。您可以将您的架构类添加到帖子中吗?
  • 我已经添加了实体类供您参考。
【解决方案2】:

如果您想要某个分区键下的所有内容,您可以这样做:

 List<DTO> DTOs = pageToList(mappedTable.query(
    QueryEnhancedRequest
        .builder()
        .queryConditional(
            QueryConditional.keyEqualTo(
                Key.builder().partitionValue(projectId).build()
            )
        )
        .build()

  private List<DTO> pageToList(SdkIterable<Page<DTO>> iterable) {
    List<DTO> rVal = new ArrayList<>();
    iterable.forEach(item -> rVal.addAll(item.items()));
    return rVal;
  }

请注意,这假设您使用的是最新的增强依赖项:

软件.amazon.awssdk dynamodb 增强型

【讨论】:

    猜你喜欢
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 2022-11-24
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多