【问题标题】:Get all items using only the Partition key from Dynamodb仅使用 Dynamodb 中的分区键获取所有项目
【发布时间】:2021-12-10 17:14:32
【问题描述】:

如何使用 Amazon DynamoDB 模块获取仅匹配分区键(表具有排序键)的所有项目。 我正在使用 GetItemRequest 来查询,没有排序键。

GetItemRequest getItemRequest = getRequest(externalId);
IDMapping.from(dynamoDB.getItem(getItemRequest).item());

当我使用 GetItemRequest 仅使用分区键查询时出现以下错误。

Caused by: software.amazon.awssdk.services.dynamodb.model.DynamoDbException: The provided key element does not match the schema (Service: DynamoDb, Status Code: 400, Request ID: 6C9BTJCJOTS7I5FI1EBJLIQK3RVV4KQNSO5AEMVJF66Q9ASUAAJG, Extended Request ID: null)

我在我的 quarkus 应用程序中使用了以下依赖项。

<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>dynamodb</artifactId>
</dependency>

此查询可以使用 aws cli、aws 控制台以及较旧的 java aws-sdk。

有什么办法可以克服吗?

提前致谢

【问题讨论】:

    标签: java amazon-dynamodb aws-sdk quarkus


    【解决方案1】:

    GetItem 请求需要完整的键(分区和排序)。您可以使用Query request 为所欲为。

        HashMap<String, String> nameMap = new HashMap<String, String>();
        nameMap.put("#yr", "year");
    
        HashMap<String, Object> valueMap = new HashMap<String, Object>();
        valueMap.put(":yyyy", 1985);
    
        QuerySpec querySpec = new QuerySpec().withKeyConditionExpression("#yr = :yyyy").withNameMap(nameMap)
            .withValueMap(valueMap);
    
        items = table.query(querySpec);
    

    此示例适用于具有复合键的表:

    • 年 - 分区键。属性类型为数字。
    • title – 排序键。属性类型为字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-10
      • 1970-01-01
      • 1970-01-01
      • 2023-01-25
      • 1970-01-01
      • 1970-01-01
      • 2020-06-24
      相关资源
      最近更新 更多