2015-05-18 3 views
11

Ich weiß, dass es eine sehr dumme Frage sein kann, aber ich bin neu in DynamoDB.Kann der Wert des Bereichsschlüssels in der DynamoDB-Tabelle geändert werden?

Mein Zweifel ist, ist es möglich, den Wert eines Bereichsschlüssel in DynamoDB zu aktualisieren.

Meine Tabelle Angenommen ist "TEST"

{ 
ID : PK/HK 
Date : RK 
Name : GSI 
Add : LSI 
} 

I Date Attribut ändern möchten.

Anfangswerte in der Tabelle war:

{ 
ID = "344" 
Date = "5656" 
Name = "ABC" 
} 

diesen Code unten ausgeführt wird. Ich bin in der Lage, das Name Attribut zu ändern, das GSI ist.

Map<String,AttributeValue> item = new HashMap<String,AttributeValue>(); 
item.put("ID", new AttributeValue("344")); 
item.put("Date", new AttributeValue("5656")); 

Map<String,AttributeValueUpdate> item1 = new HashMap<String,AttributeValueUpdate>(); 

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); 

Aber wenn ich diese Zeile ändern

item1.put("Name", update); 

mit

item1.put("Date", update); 

Ich erhalte einige Fehler als

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) 

So ist es möglich, den Bereich Key zu ändern Wert?

+0

Der eindeutige Schlüssel kann nicht geändert werden –

Antwort

8

Nein, wie die Ausnahme Meldung, Sie Cannot update attribute Date. This attribute is part of the key.

Sie können dies auch unter den AttributeUpdates documentation sehen:

Die Namen der Attribute geändert werden, wird die Aktion auf jedem auszuführen, und den neuen Wert für jeden. Wenn Sie ein Attribut aktualisieren, das ein Indexschlüsselattribut für Indizes für diese Tabelle ist, muss das Attribut Typ den Indexschlüssel Typ übereinstimmen, der in der Attributsdefinition der Tabellenbeschreibung definiert ist. Sie können UpdateItem verwenden, um alle Nicht-Schlüssel-Attribute zu aktualisieren.

Die Dokumentation besagt, dass Sie jedes Attribut für „ein Attribut, das für alle Indizes für die Tabelle ein Indexschlüsselattribut ist“ aktualisieren können, was bedeutet, dass, wenn Sie ein Attribut aktualisieren, die auf einen Index projiziert wird, auch Es ist Teil dieses Indexschlüssels. Dieser Index wird ebenfalls aktualisiert, um den ursprünglichen Artikel wiederzugeben.

3

Es ist ein wenig begraben, aber in Docs für UpdateItem heißt es: "Sie können UpdateItem verwenden, um alle Nicht-Schlüssel-Attribute zu aktualisieren."

Also, die einzige Möglichkeit, den Primärschlüssel eines Elements zu aktualisieren, besteht darin, das alte Element zu löschen und ein neues zu schreiben.

7

Aus der Dokumentation von AttributeValueUpdate

können Sie verwenden UpdateItem keine Primärschlüsselattribute zu aktualisieren. Stattdessen müssen Sie das Element löschen und dann mithilfe von PutItem ein neues Element mit neuen Attributen erstellen.

Verwandte Themen