java删除dynamodb中的所有项目

luu*_*uux 7 java amazon-dynamodb

我试图删除 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);
    }
Run Code Online (Sandbox Code Playgroud)

n1 是我的主分区键

n2 是我的主排序键

Ron*_*fin 6

前言:虽然扫描操作很昂贵,但我需要这个答案来初始化测试场景(低容量)的表。该表是由另一个进程创建的,我需要该表上的测试场景,因此我无法删除并重新创建该表。

答案:给出:

  • DynamoDbClient 数据库

  • 静态字符串表名

  • 静态字符串 HASH_KEY

  • 静态字符串 SORT_KEY

     ScanIterable scanIterable = db.scanPaginator(ScanRequest.builder()
             .tableName(TABLE_NAME)
             .build());
     for(ScanResponse scanResponse:scanIterable){
         for( Map<String, AttributeValue> item: scanResponse.items()){
             Map<String,AttributeValue> deleteKey = new HashMap<>();
             deleteKey.put(HASH_KEY,item.get(HASH_KEY));
             deleteKey.put(SORT_KEY,item.get(SORT_KEY));
             db.deleteItem(DeleteItemRequest.builder()
                     .tableName(TRANSACTION_TABLE_NAME)
                     .key(deleteKey).build());
         }
     }
    
    Run Code Online (Sandbox Code Playgroud)


not*_*est 4

从 DynamoDB 删除所有项目的最佳方法是删除表并重新创建它。

否则,会使用大量的读取容量和写入容量单位,这会让您付出代价。

删除并重新创建表是最好的方法。