DynamoDb:删除所有具有相同哈希密钥的项

本文关键字:哈希 密钥 删除 DynamoDb | 更新日期: 2023-09-27 18:26:36

考虑下表:

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

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

DynamoDb:删除所有具有相同哈希密钥的项

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

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"的解释,其中明确表示,我们必须通过Hash(分区密钥)和Range(排序密钥)才能删除该项。

如果只想通过哈希键删除,需要先查询记录,然后使用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一次只删除一个项目,并且需要为此指定哈希键和范围键。

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

指定hashkey和sortKey的具体值是很痛苦的。唯一的选择是扫描表以检索主键(或组合键),然后使用deleteItem API对其进行迭代以删除单个项。

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

有关更多信息,您可以参考AWS的API:https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchWriteItem.html