
[英]delete record from dynamodb using boto3 when sort key is not known
[英]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)
调查问题后,我发现键应该是分区键和排序键的组合。 但问题是我不知道第二个请求的完整排序键。
您需要将QueryConditional
与sortBeginsWith()
结合使用:
例如,假设您有以下信息
分区键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.