是否可以在不指定分区或排序键的情况下从DynamoDB表中删除项目?我在表中有许多条目,包含不同的分区和排序键,我想删除某个属性不存在的所有项目。
欢迎使用AWS CLI或boto3 / python解决方案。
答案 0 :(得分:0)
要从表中删除大量项目,您需要先查询或扫描,然后使用File#open
或BatchWriteItem操作删除项目。
查询和DeleteItem是性能和成本的更好内容,因此如果这是一项经常发生的工作,最好在您需要检查删除的属性上添加全局二级索引。但是,您需要针对大量项目迭代地管理BatchWriteItem,因为查询将返回分页值。
否则你可以进行扫描 BatchWriteItem迭代地。
检查DeleteItem Stackoverflow问题以获取更多信息。
答案 1 :(得分:0)
尝试使用EMR Hive与DynamoDB集成是值得的。它允许您针对DynamoDB编写SQL查询。 Hive支持DELETE语句,Amazon已实现DynamoDB connector。我不确定这是否会完美融合,但这值得一试。 Here是如何使用EMR Hive使用DynamoDB。
另一种选择是使用并行扫描。只需从DynamoDB中获取与过滤器表达式匹配的所有项目,然后删除其中的每一项。 Here is how使用boto客户端进行扫描。
要加快处理速度,您可以使用BatchWriteItem方法批量删除项目。 Here是如何在boto中执行此操作。
请注意,BatchWriteItem具有以下限制:
BatchWriteItem最多可以写入16 MB的数据,其中包含as 许多人提出或删除请求。
请记住扫描是昂贵的,当您进行扫描时,您为所有项目消耗RCU DynamoDB在您的表中读取而不是它返回的项目。因此,您需要缓慢读取数据或为表格提供非常高的RCU。
不经常进行此操作是可以的,但如果您有一个体面的大小表,则不能将其作为Web服务器请求的一部分。