在DynamoDB表中更改Range键的值是否可能?

10 浏览
0 Comments

在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 = new HashMap();

item.put("ID", new AttributeValue("344"));

item.put("Date", new AttributeValue("5656"));

Map item1 = new HashMap();

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)

所以,是否可以更改范围键的值呢?

0