首页 > 解决方案 > 仅使用分区键 (NOT DUPLICATE) 从 AWS DynamoDB 中批量删除项目

问题描述

我正在尝试删除具有特定值作为主键的所有项目例如:groupName是 DynamoDB 上的主键列。有一个groupVersion列是排序键。我想删除 groupName 列值为 group123的所有项目

一个简单的mysql查询会:

delete from table XYZ where groupName = 'group123';

我尝试了下面的代码,但它总是无法删除消息:The provided key element does not match the schema (Service: DynamoDb, Status Code: 400

我试过的代码:

TableSchema<Group> TABLE_SCHEMA = StaticTableSchema.builder(Group.class)
    .newItemSupplier(Group::new)
    .addAttribute(String.class, a -> a.name("groupName")
            .getter(schema -> schema.getGroupName())
            .setter((schema, schemaName) -> {
                schema.setSchemaName(schemaName);
            })
            .tags(primaryPartitionKey()))
    .addAttribute(Long.class, a -> a.name("groupVersion")
            .getter(schema -> schema.getGroupVersion())
            .setter((schema, s) -> {
                schema.setSchemaVersion(s);
            })
            .tags(primarySortKey()))
    .addAttribute(String.class, a -> a.name("value")
            .getter(schema -> schema.getValue())
            .setter((schema, s) -> {
                schema.setValue(s);
            }))
    .build();

Region region = Region.US_EAST_1;
DynamoDbClient ddb = DynamoDbClient.builder()
        .region(region)
        .enableEndpointDiscovery()
        .build();

DynamoDbEnhancedClient client = DynamoDbEnhancedClient.builder()
        .dynamoDbClient(ddb)
        .build();

client.table(tableName, TABLE_SCHEMA).deleteItem(DeleteItemEnhancedRequest.builder()
    .key(Key.builder().partitionValue("group123").build())
    .build());

使用 AWS Java SDK v2。SDK的Maven版本是2.13.4

标签: javaamazon-web-servicesamazon-dynamodbaws-sdk

解决方案


推荐阅读