2

伙计们,从 DynamoDB 表中检索所有项目,我想用查询替换扫描操作。

目前我正在通过以下(python)提取所有表的数据:

drivertable = Table(url['dbname'])
all_drivers = []
all_drivers_query = drivertable.scan()
for x in all_drivers_query:
  all_drivers.append(x['number'])

我将如何更改它以使用查询 API?

谢谢!

4

2 回答 2

2

没有办法query获得表格的全部结果。到目前为止,如果您想从 DynamoDB 中获取所有数据,您有几个选择,所有这些都涉及从 DynamoDB 中实际读取数据:

  1. 扫描表它可以通过使用并行扫描以使用更多读取容量为代价更快地完成
  2. 使用 AWS Data Pipelines 导出您的数据。您可以配置导出作业的存储位置和方式。
  3. 使用 AWS 事件平台之一处理新数据并将其非规范化。对于所有新数据,您可以从 DynamoDB 更新流使用 AWS Lambda 处理事件获取表的所有更新按时间排序的流
于 2014-12-17T00:33:43.057 回答
2

你不能query整张桌子。Query用于通过提供散列键(表的复杂主键散列范围的一部分)来检索一组项目。

query不知道哈希键就不能使用。

EDIT 作为赏金被添加到这个老问题中,该问题询问:

How do I get a list of hashes from DynamoDB?

好吧 - 在 2014 年 12 月,您仍然无法通过单个 API 询问表的所有哈希键。即使您去放置 GSI,您仍然无法获得 DISTINCT 哈希计数。

我解决这个问题的方法是反规范化。保留另一个没有范围键的表,并将每个散列与主表放在一起。这会为您的应用程序级别增加管理开销(主要是在删除时),但可以解决您提出的问题。

于 2013-11-10T22:41:45.113 回答