Удаление атрибута в DynamoDB - PullRequest
       7

Удаление атрибута в DynamoDB

7 голосов
/ 04 февраля 2012

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

Исключение в потоке "main" Код состояния: 400, Сервис AWS: AmazonDynamoDB,Идентификатор запроса AWS: 09MRO4PVTJ8IK6OHLKSM551REJVV4KQNSO5AEMVJF66Q9ASUAAJG, код ошибки AWS: ValidationException, сообщение об ошибке AWS: недопустимо одно или несколько значений параметров: действие DELETE не поддерживается для типа N в com.amaawaws.http.lient.Hell.HenSHRP)по адресу com.amazonaws.http.AmazonHttpClient.executeHelper (AmazonHttpClient.java:284) по адресу com.amazonaws.http.AmazonHttpClient.execute (AmazonHttpClient.java:169) по адресу> com.amazonaws.services.lientDoo. Dynamo.java: 675) at> 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.

Помощь будет принята.

Ответы [ 3 ]

11 голосов
/ 07 февраля 2012

Я мог бы поклясться, что уже пробовал это, но, заменив 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);
6 голосов
/ 14 сентября 2015

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

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

или Вы даже можете использовать выражения в Обновлении предмета.

УДАЛИТЬ - Удаляет один или несколько атрибутов изпредмет.

0 голосов
/ 17 мая 2018

Чтобы удалить атрибут из БД Dynamo при обновлении элемента таблицы

 UpdateItemRequest updateItemRequest =new UpdateItemRequest().withTableName(tableName).withKey(key);
 updateItemRequest.addAttributeUpdatesEntry("privileges",new AttributeValueUpdate()
          .withAction(AttributeAction.DELETE));

updateItemRequest.addAttributeUpdatesEntry("description", new AttributeValueUpdate()
          .withValue(new AttributeValue().withS("description")));

В приведенном выше примере сначала я удалил privileges из Item, а затем обновил description в Item.

...