我正在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
方法,但是它也不起作用。
答案 0 :(得分:1)
PosTracking表的主键架构是什么?它有范围键吗?如果是这样,则需要同时指定哈希键和范围键。 DynamoDB不允许您仅使用哈希键删除项目-您必须指定完整的主键,包括范围键。