ValidationException:“提供的键元素与架构不匹配”进行dynmoDB batchWriteItem操作时出错

时间:2018-07-11 08:33:02

标签: java amazon-web-services amazon-dynamodb

我正在DynamoDb的多个表上执行batchWriteItem操作。我的代码如下-

    BatchWriteItemOutcome outcome = null;
    try {
        TableWriteItems userTableWriteItems = new TableWriteItems("User")
                .withHashAndRangeKeysToDelete("clientAccountKey", "userKey", clientAccountKey, "xyzUserKey"); // Working for this Method

        TableWriteItems PosTrackingWriteItems = new TableWriteItems("PosTracking")
                .withHashOnlyKeysToDelete("userKey", "xyzUserKey"); // ** Not Working for this **

        outcome = dynamoDb.batchWriteItem (
                userTableWriteItems,
                PosTrackingWriteItems);     
    }
    catch(Exception e){
        System.out.println("Exception in Removing User Data !!! ");
        e.printStackTrace();
    }

如果我仅在同时指定Hash和Range键的情况下指定batchWrite delete withHashAndRangeKeysToDelete方法,则该方法有效。 但是它不适用于我将HashKey名称和HashKey值指定为参数的withHashOnlyKeysToDelete方法。我不断收到此异常:

  

com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException:提供的键元素与架构不匹配。服务:AmazonDynamoDBv2;状态码:400;错误代码:ValidationException。

我的PosTracking表具有HashKey(字符串)作为userKey,我也从方法中传递了String。我在此表中也有一个GSI,名称为clientAccountKey(String)。我也尝试对TableWriteItems使用addHashOnlyPrimaryKeysToDelete.addPrimaryKeyToDelete方法,但是它也不起作用。

1 个答案:

答案 0 :(得分:1)

PosTracking表的主键架构是什么?它有范围键吗?如果是这样,则需要同时指定哈希键和范围键。 DynamoDB不允许您仅使用哈希键删除项目-您必须指定完整的主键,包括范围键。