Ява удалить все элементы в DynamodB - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь удалить все элементы в моей таблице в Dynamodb, но это не работает.

    try {
        ScanRequest scanRequest = new ScanRequest().withTableName(table);
        ScanResult scanResult = null;

        do {
            if (Check.nonNull(scanResult)) {
                scanRequest.setExclusiveStartKey(scanResult.getLastEvaluatedKey());
            }

            scanResult = client.scan(scanRequest);

            scanResult.getItems().forEach((Item) -> {
                String n1 = Item.get("n1").toString();
                String n2 = tem.get("n2").toString();
                DeleteItemSpec spec = new DeleteItemSpec().withPrimaryKey("n1", n1, "n2", n2);
                dynamodb.getTable(table).deleteItem(spec);
            });
        } while (Check.nonNull(scanResult.getLastEvaluatedKey()));
    } catch (Exception e) {
        throw new BadRequestException(e);
    }

n1 - мой Основной ключ раздела

n2 - мой Основной ключ сортировки

Ответы [ 2 ]

0 голосов
/ 09 июля 2019
To delete all the items from the table first you need to perform scan operation over the table which will results you an scanoutcome. Using the iterator loop over the sacnoutcome with the primary key and it's primary key value.This will be one of the approach to delete all the items from the table. Hope that this code will work you. Thanks




    Table table = dynamoDB.getTable(your_table);
    ItemCollection<ScanOutcome> deleteoutcome = table.scan();
    Iterator<Item> iterator = deleteoutcome.iterator();

    while (iterator.hasNext()) {
        your_table.deleteItem("PrimaryKey" , iterator.next().get("primary key value"));
    }   

May be we can make it look generic by reading key schema first as below
        String strPartitionKey = null;
        String strSortKey = null;
        TableDescription description =  table.describe();
        List<KeySchemaElement> schema =  description.getKeySchema();
        for (KeySchemaElement element: schema) {
            if (element.getKeyType().equalsIgnoreCase("HASH"))
                strPartitionKey = element.getAttributeName();
            if (element.getKeyType().equalsIgnoreCase("RANGE"))
                strSortKey = element.getAttributeName();
        }

        ItemCollection<ScanOutcome> deleteoutcome = table.scan();
        Iterator<Item> iterator = deleteoutcome.iterator();
        while (iterator.hasNext()) {
            Item next = iterator.next();
            if (strSortKey == null && strPartitionKey != null)
                table.deleteItem(strPartitionKey , next.get(strPartitionKey));
            else if (strPartitionKey != null && strSortKey != null)
                table.deleteItem(strPartitionKey , next.get(strPartitionKey), strSortKey, next.get(strSortKey));
        }   
0 голосов
/ 17 октября 2018

Лучший способ удалить все элементы из DynamoDB - это удалить таблицу и воссоздать ее.

В противном случае используется большое количество единиц чтения и емкости записи, которые будут стоить вам.

Отбрасывание и воссоздание таблицы - лучший подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...