gpt4 book ai didi

java - AWS DynamoDB 通过 Java SDK 删除

转载 作者:行者123 更新时间:2023-11-29 04:46:40 26 4
gpt4 key购买 nike

尝试通过 AWS Java SDK 进行删除时出现错误

The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: 52N303HS3D535K28KSN3R3803VVV4KQNSO5AEMVJF66Q9ASUAAJG)

我定义了一个删除项目规范,看起来像这样

DeleteItemSpec deleteItemSpec = new DeleteItemSpec()
.withPrimaryKey("pk", messageId)
.withConditionExpression("#ip > :val")
.withNameMap(new NameMap()
.with("#ip", "timestamp"))
.withValueMap(new ValueMap()
.withNumber(":val", 0))
.withReturnValues(ReturnValue.NONE);

我的表是这样创建的

List<AttributeDefinition> attributeDefinitions = new ArrayList<>();
attributeDefinitions.add(new AttributeDefinition()
.withAttributeName("pk")
.withAttributeType(ScalarAttributeType.S));
attributeDefinitions.add(new AttributeDefinition()
.withAttributeName("timestamp")
.withAttributeType(ScalarAttributeType.N));

List<KeySchemaElement> keySchema = new ArrayList<>();
keySchema.add(new KeySchemaElement()
.withAttributeName("pk")
.withKeyType(KeyType.HASH));
keySchema.add(new KeySchemaElement()
.withAttributeName("timestamp")
.withKeyType(KeyType.RANGE));

我想知道时间戳的排序键是否导致了这个问题。我是否需要指定 > 0 以外的时间戳?

最佳答案

问题是您在删除对象时必须同时指定散列键和范围键。您的散列键是“pk”,您的范围键是“时间戳”,但您只是将散列键传递给 withPrimaryKey 方法。

您似乎正在尝试一次删除多个项目。这对于 DynamoDB 是不可能的。您首先需要对键进行查询,然后可以将条件表达式应用于该键以仅检索要删除的项目的键。但是,您随后需要为每条记录单独调用删除 API 或使用批处理 API 批量删除记录,同时仍然为每个单独的项目指定哈希和范围键。

关于java - AWS DynamoDB 通过 Java SDK 删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36868773/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com