DynamoDb:删除具有相同哈希键的所有项目

时间:2015-12-14 03:32:39

标签: java c# .net amazon-web-services amazon-dynamodb

考虑下表:

Table (documentId : Hash Key, userId: Range Key)

如何编写代码以删除具有相同documentId的所有项目,最好不检索项目。

3 个答案:

答案 0 :(得分:11)

目前,您不能仅通过传递哈希键来删除所有项目,以删除它需要哈希+范围的项目,因为这是使其独特的原因。

You have to know both your (hash + range) to delete the item. 

编辑:以下是DynamoDB文档http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteItem.html#API_DeleteItem_RequestSyntax

的参考链接

请阅读" KEY"的说明。这清楚地说我们必须传递哈希(分区键)和范围(排序键)来删除项目。

答案 1 :(得分:1)

如果只想通过哈希键删除,则需要先查询记录,然后使用batchDelete删除所有记录。

HashMap<String, AttributeValue> eav = new HashMap<String, AttributeValue>();
eav.put(":v1", new AttributeValue().withS(value));
DynamoDBQueryExpression<DocumentTable> queryExpression = new DynamoDBQueryExpression<DocumentTable>()
            .withKeyConditionExpression("documentId = :v1")
            .withExpressionAttributeValues(eav);
List<DocumentTable> ddbResults = dynamoDBMapper.query(DocumentTable.class, queryExpression);
dynamoDBMapper.batchDelete(ddbResults);

我想在此呼吁deleteItem一次只删除一个项目,并且需要为此指定散列键和范围键。

答案 2 :(得分:0)

我有一个类似的要求,我需要从DynamoDB表中删除超过1000万行。我希望有一种方法可以基于特定的分区键删除所有项目,但是不幸的是没有办法(至少找不到)。

指定hashkey和sortKey的特定值很麻烦。唯一的选择是扫描表以检索主键(或组合键),然后使用deleteItem API遍历该表以删除单个项。

您可以使用BatchWriteItem API在一次调用中最多删除 25个项目(最大400KB)

您可以从AWS引用此API以获得更多信息:https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchWriteItem.html