【问题标题】:How do I delete items from a DynamoDB table wherever an attribute is missing, regardless of key?无论键如何,如何在缺少属性的情况下从 DynamoDB 表中删除项目?
【发布时间】:2017-07-25 18:18:01
【问题描述】:

是否可以在不指定分区或排序键的情况下从 DynamoDB 表中删除项目?我的表中有许多具有不同分区和排序键的条目,我想删除某个属性不存在的所有项目。

欢迎使用 AWS CLI 或 boto3/python 解决方案。

【问题讨论】:

    标签: python amazon-web-services amazon-dynamodb boto3 aws-cli


    【解决方案1】:

    要从表中删除大量项目,您需要先查询或扫描,然后使用BatchWriteItemDeleteItem操作删除项目。

    查询和BatchWriteItem在性能和成本方面更好,所以如果这是一个经常发生的工作,最好在你需要检查删除的属性上添加一个全局二级索引。但是,您需要为大量项目迭代管理 BatchWriteItem,因为查询将返回分页值。

    否则,您可以进行扫描并 DeleteItem 迭代。

    查看this Stackoverflow 问题以获得更多信息。

    【讨论】:

      【解决方案2】:

      值得尝试使用 EMR Hive 与 DynamoDB 的集成。它允许您针对 DynamoDB 编写 SQL 查询。 Hive 支持 DELETE 语句,亚马逊已经实现了DynamoDB connector。我不确定这是否会完美集成,但这值得一试。 Here 是如何使用 EMR Hive 处理 DynamoDB。

      另一种选择是使用并行扫描。只需从 DynamoDB 中获取与过滤器表达式匹配的所有项目,然后删除每个项目。 Here is how 使用 boto 客户端进行扫描。

      为了加快进程,您可以使用BatchWriteItem 方法批量删除项目。 Here 是如何在 boto 中做到这一点的。

      注意 BatchWriteItem 有以下限制:

      BatchWriteItem 最多可以写入 16 MB 的数据,其中可以包括 多达 25 个放置或删除请求。

      请记住,扫描代价高昂,当您进行扫描时,您会为 DynamoDB 读取表中的所有项目而不是它返回的项目消耗 RCU。因此,您要么需要缓慢读取数据,要么需要为表提供非常高的 RCU。

      不经常执行此操作是可以的,但如果您有一个合适大小的表,则不能将其作为 Web 服务器请求的一部分执行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多