2012-02-04 17 views
5

Sto cercando di capire il modo migliore per eliminare un attributo da un elemento in Dynamo DB. Qui di seguito è quello che ho provato, ma ho un'eccezione dicendo che cancellare non è una supportata per entrambi i tipi N o S.Eliminazione attributo in DynamoDB

Exception in thread Status Code "principale": 400, AWS Servizio: AmazonDynamoDB, AWS Request ID : 09MRO4PVTJ8IK6OHLKSM551REJVV4KQNSO5AEMVJF66Q9ASUAAJG, AWS Codice di errore: ValidationException, il messaggio di errore AWS: Uno o più valori di parametro non sono validi: azione di eliminazione non è supportata per il tipo N a com.amazonaws.http.AmazonHttpClient.handleErrorResponse (AmazonHttpClient.java:544) a com.amazonaws.http.AmazonHttpClient.executeHelper (AmazonHttpClient.java:284) su com.amazonaws.http.AmazonHttpClient.execute (AmazonHttpClient.java:169) presso> com.amazonaws.services.dynamodb.AmazonDynamoDBCl ient.invoke (AmazonDynamoDBClient.java:675) a> com.amazonaws.services.dynamodb.AmazonDynamoDBClient.updateItem (AmazonDynamoDBClient.java:371)

Key pk = new Key(new AttributeValue().withN(Long.toString(123))); 
AttributeValueUpdate avu = new AttributeValueUpdate(new AttributeValue().withN("555"), "DELETE"); 
Map<String, AttributeValueUpdate> m = new HashMap<String, AttributeValueUpdate>(); 
m.put(String.valueOf(555), avu); 
UpdateItemRequest uir = new UpdateItemRequest("users", pk, m); 
dynamoDB.updateItem(uir); 

Un punto di confusione è perché le questioni di valore di attributo per una cancellazione. Voglio davvero eliminare un nome di attributo e qualsiasi valore associato, ma non ho trovato il modo appropriato per farlo nell'SDK.

L'aiuto sarebbe apprezzato.

+1

Potresti pubblicare l'eccezione effettiva –

+0

@Layble: Sono contento che sei riuscito a risolvere da solo - potresti pubblicare la soluzione come risposta e accettarla? Seguire la tua stessa domanda è perfettamente ragionevole e desiderato, purché sia ​​stata una vera domanda aperta in primo luogo. Grazie :) –

risposta

9

avrei giurato ho già provato questo ma sostituendo l'AttributeValue con un valore nullo così:

Key pk = new Key(new AttributeValue().withN(Long.toString(123))); 
AttributeValueUpdate avu = new AttributeValueUpdate(null, "DELETE"); 
Map<String, AttributeValueUpdate> m = new HashMap<String, AttributeValueUpdate>(); 
m.put(String.valueOf(555), avu); 
UpdateItemRequest uir = new UpdateItemRequest("users", pk, m); 
dynamoDB.updateItem(uir); 
+0

+1 per aver seguito la tua soluzione, grazie! –

3

funziona anche questo.

Table table = dynamoDB.getTable("users"); 
table.updateItem(new PrimaryKey("<MY HASH KEY NAME>", <MY HASH VALUE>), new AttributeUpdate("columnToRemove").delete()); 

o you can even use Expressions in un aggiornamento articolo.

RIMUOVI - Rimuove uno o più attributi da un elemento.