2015-05-18 4 views
11

So che potrebbe essere una domanda molto sciocca, ma sono nuovo di DynamoDB.È possibile modificare il valore della chiave Range nella tabella DynamoDB?

Il mio dubbio è che è possibile aggiornare il valore di un Range Key in DynamoDB.

Supponiamo Il mio tavolo è "TEST"

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

voglio modificare Date attributo.

valori iniziali in tabella è stata:

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

L'esecuzione di questo codice qui sotto. Sono in grado di modificare l'attributo Name che è GSI.

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

Ma Quando cambio questa linea

item1.put("Name", update); 

con

item1.put("Date", update); 

sto ottenendo un errore come

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) 

così è possibile cambiare il tasto RANGE valore?

+0

come la sua unica chiave non può essere modificata –

risposta

8

No, come indica il messaggio di eccezione, è Cannot update attribute Date. This attribute is part of the key.

È anche possibile vedere questo sotto la AttributeUpdates documentation:

I nomi degli attributi da modificare, l'azione da eseguire su ogni, e il nuovo valore per ciascuno. Se si aggiorna un attributo che è un attributo della chiave di indice per qualsiasi indice su quella tabella, il tipo di attributo deve corrispondere al tipo di chiave dell'indice definito nella AttributesDefinition della descrizione della tabella. È possibile utilizzare UpdateItem per aggiornare qualsiasi attributo non chiave .

La documentazione che è possibile aggiornare qualsiasi attributo per "un attributo che è un attributo chiave di indice per tutti gli indici su quel tavolo", il che significa che quando si aggiorna un attributo che viene proiettato su un indice, anche è parte della chiave di quell'indice, quell'indice verrà aggiornato per riflettere l'elemento originale.

3

È un po 'sepolto ma in documenti per UpdateItem dice: "È possibile utilizzare UpdateItem per aggiornare eventuali attributi non chiave."

Quindi, attualmente l'unico modo per aggiornare la chiave primaria di un articolo è eliminare il vecchio elemento e scriverne uno nuovo.

7

Dalla documentazione di AttributeValueUpdate

Non è possibile utilizzare UpdateItem per aggiornare tutti gli attributi chiave primaria. Invece, sarà necessario eliminare l'elemento e quindi utilizzare PutItem per creare un nuovo elemento con nuovi attributi.

Problemi correlati