AWS DynamoDB检索整个表

时间:2013-11-06 17:23:45

标签: python amazon-web-services amazon-dynamodb

民间,   从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?

谢谢!

2 个答案:

答案 0 :(得分:2)

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

如果不知道哈希键,就无法使用query

编辑作为赏金被添加到这个问题中的旧问题:

How do I get a list of hashes from DynamoDB?

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

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

答案 1 :(得分:2)

无法query获取表格的整个结果。目前,如果您希望从DynamoDB中获取所有数据,并且所有这些数据都涉及实际从DynamoDB中读取数据,那么您有几个选项:

  1. Scan the table。使用parallel scan
  2. 可以更快地完成它,并且需要花费更多的读取容量
  3. Export your data using AWS Data Pipelines。您可以为导出作业配置存储数据的位置和方式。
  4. 使用其中一个AWS事件平台获取新数据并对其进行非规范化。对于所有新数据,您可以get a time-ordered stream of all updates to the table from DynamoDB Update Streamsprocess events using AWS Lambda