Массовое удаление элементов из AWS DynamoDB только с ключом раздела (НЕ ДУБЛИРОВАТЬ) - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь удалить все элементы, имеющие определенное значение в качестве первичного ключа. Например: 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. Maven версия SDK: 2.13.4

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