【问题标题】:boto dynamodb batch_write and delete_item -- 'The provided key element does not match the schema'boto dynamodb batch_write 和 delete_item -- '提供的关键元素与架构不匹配'
【发布时间】:2014-03-16 00:46:42
【问题描述】:

我正在尝试使用 boto 和 python 删除 DynamoDB 表中的大量项目。我的表设置了主键作为设备 ID(想想 MAC 地址。)每个设备 ID 在表中有多个条目,因为辅助键是 UNIX 时间戳。

根据我的阅读,这段代码应该可以工作:

from boto.dynamodb2.table import Table

def delete_batch(self, guid):    
    table = Table('Integers')

    with table.batch_write() as batch:
        batch.delete_item(Id=guid)

来源:http://docs.pythonboto.org/en/latest/dynamodb2_tut.html#batch-writing

但是它返回“提供的关键元素与架构不匹配”作为错误消息。

我怀疑问题是因为 guid 在我的表中不是唯一的。

鉴于此,有没有办法在不指定辅助键的情况下删除具有相同主键的多个项目?

【问题讨论】:

标签: python boto amazon-dynamodb


【解决方案1】:

您只提供键的哈希部分而不是项目(哈希+范围) - 这就是您收到错误且无法删除项目的原因。

您不能要求 DynamoDB 使用哈希键删除所有项目(与 Query 获取所有项目的方式相同)

阅读 Steffen 的 this answer 了解更多信息

【讨论】:

  • 谢谢。听起来我需要为每个guid 制作一个表格,然后在完成后删除该表格。可惜 DynamoDB 不支持批量删除,但我敢肯定它有一些架构上的原因。
  • 良好的写入成本很高。批量写入(删除)很难实现,也有点违背 dynamodb 提供的方法(它试图强制使用尽可能预测)。祝你好运
猜你喜欢
  • 1970-01-01
  • 2016-09-14
  • 2021-08-26
  • 2019-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多