2012-02-04 2 views
5

Я пытаюсь найти лучший способ удалить атрибут из элемента в DB Dynamo. Ниже то, что я пытался, но я получаю исключение о том, что DELETE не поддерживается для любого типа N или S.Удаление атрибута в DynamoDB

Исключение в нити «главного» Статус Код: 400, AWS служба: AmazonDynamoDB, AWS Request ID : 09MRO4PVTJ8IK6OHLKSM551REJVV4KQNSO5AEMVJF66Q9ASUAAJG, AWS Код ошибки: ValidationException, AWS Сообщение об ошибке: Одно или несколько значений параметров были признаны недействительными: Действие DELETE не поддерживается для типа N в com.amazonaws.http.AmazonHttpClient.handleErrorResponse (AmazonHttpClient.java:544) в com.amazonaws.http.AmazonHttpClient.executeHelper (AmazonHttpClient.java:284) at com.amazonaws.http.AmazonHttpClient.execute (AmazonHttpClient.java:169) at> com.amazonaws.services.dynamodb.AmazonDynamoDBCl ient.invoke (AmazonDynamoDBClient.java:675) в> 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); 

Одна точка путанице почему вопросы значения атрибута для удаления. Я действительно хочу удалить имя атрибута и любые связанные значения, но не смог найти подходящий способ сделать это в SDK.

Справка будет принята с благодарностью.

+1

Не могли бы вы выставить фактическое исключение –

+0

@Layble: Рад, что вам удалось это решить самостоятельно - не могли бы вы разместить свое решение в качестве ответа и принять его? В соответствии с вашим собственным вопросом вполне разумно и желательно, если бы это был настоящий открытый вопрос в первую очередь. Спасибо :) –

ответ

9

Я мог бы поклясться, я уже пробовал это, но заменив AttributeValue с нулевым значением он работает:

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 за ваше решение, спасибо! –

3

Это также работает.

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

или you can even use Expressions в обновлении элемента.

REMOVE - удаляет один или несколько атрибутов из одного предмета.

Смежные вопросы