繁体   English   中英

如果不知道完整的排序键,则从 DynamoDB 检索数据

[英]Retrieve Data from DynamoDB if complete sort key not known

我是 DyanmoDB 的新手。 我在将数据推送到 DynamoDb 时正在创建分区键和排序键,但是当我想检索数据时,我有分区键但没有完整的排序键。 我知道排序键的开头但不知道完整键。

table.query(QueryEnhancedRequest.builder().queryConditional(QueryConditional.keyEqualTo(Key.builder().partitionValue("KEY#" + id).build())).build())  

以下是表分区和排序键:

private static final String TEMPLATE = "%s#%s";    
@DynamoDbPartitionKey
      @Override
      public String getPk() {
        return String.format(TEMPLATE, "KEY", getId());
      }
    
      @DynamoDbSortKey
      @Override
      public String getSk() {
        return String.format(TEMPLATE, "KEY_SORT", getName());
      }

我使用了上面提供的内容,但显示此错误:提供的关键元素与架构不匹配(服务:DynamoDb,状态代码:400,请求 ID:响应 ID)
调查问题后,我发现键应该是分区键和排序键的组合。 但问题是我不知道第二个请求的完整排序键。

您需要将QueryConditionalsortBeginsWith()结合使用:

例如,假设您有以下信息

分区键pk = "key#23456"

排序键sk"abcd"开头

您不确定排序键的其余部分:

        QueryConditional condition = QueryConditional.sortBeginsWith(
                Key.builder()
                        .partitionValue("key#23456")
                        .sortValue("abcd")
                        .build()
        );

        QueryEnhancedRequest request = QueryEnhancedRequest.builder()
                .queryConditional(condition)
                .build();


        table.query(request);

如果您只知道排序键的开头,可以使用BEGINS_WITH查询。

aws dynamodb query \
    --table-name TABLE \
    --key-condition-expression "Id = :id and begins_with(Key, :key)" \
    --expression-attribute-values '{":id":{"S":"1"}, ":key":{"S":"KEY-BEGINNING"}}'

您需要为此查询提供主键和排序键的开头。

请参见查询的关键条件表达式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM