在DynamoDB表中更改Range键的值是否可能?
在DynamoDB表中更改Range键的值是否可能?
我知道这可能是一个非常愚蠢的问题,但我对DynamoDB还不熟悉。
我的疑问是在DynamoDB中是否可以更新范围键(Range Key)的值。
假设我的表名为"TEST",结构如下:
{
ID : Partition Key/Hash Key(主键)
Date : Range Key(范围键)
Name : GSI(全局二级索引)
Add : LSI(局部二级索引)
}
我想修改"Date"属性的值。
表中的初始值为:
{
ID = "344"
Date = "5656"
Name = "ABC"
}
运行下面的代码,我可以成功修改GSI中的"Name"属性:
Map
item.put("ID", new AttributeValue("344"));
item.put("Date", new AttributeValue("5656"));
Map
AttributeValueUpdate update = new AttributeValueUpdate().withValue(new AttributeValue("AMIT")).withAction("PUT");
item1.put("Name", update);
UpdateItemRequest updateItemreq = new UpdateItemRequest("Test",item,item1);
UpdateItemResult updateItemres = dynamoDBUSEast.updateItem(updateItemreq);
但是,当我将这行代码:
item1.put("Name", update);
改为:
item1.put("Date", update);
我得到了以下错误:
Exception in thread "main" com.amazonaws.AmazonServiceException: One or more parameter values were invalid: Cannot update attribute Date. This attribute is part of the key (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: HRRP24Q7C48AMD8ASAI992L6MBVV4KQNSO5AEMVJF66Q9ASUAAJG)
at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:820)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:439)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:245)
at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:2908)
at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.updateItem(AmazonDynamoDBClient.java:1256)
所以,是否可以更改范围键的值呢?