我想更新DynamoDB中的内容,为此需要迭代表中已有的分区键。有没有办法使用Python仅获取分区键列表。扫描和查询仅适用于我的表属性。有没有办法获取表的所有分区键?
我想更新DynamoDB中的内容,为此需要迭代表中已有的分区键。有没有办法使用Python仅获取分区键列表。扫描和查询仅适用于我的表属性。有没有办法获取表的所有分区键?
如果你的表除了使用分区键外还使用排序键(换句话说,如果这些键是由分区键和排序键组合而成),那么答案是:不行——没有办法查询或扫描只有分区键。需要澄清的是,你仍然可以通过一个只返回键的投影来扫描你的表,但它将为每个具有不同排序键的相同主键的项多次返回每个主键。
如果你的表模式只使用分区键(没有排序键),那么你可以编写一个只包含主键的投影的扫描,因此得到分区键列表作为结果。
有一种方法可以通过对LastEvaluatedKey进行一些创造性的操作来提取唯一的主键列表,以避免完全扫描整个表。
有关讨论和代码,请参阅此博客:
要获取表中的所有分区键,您需要使用Scan
,它将读取表中的所有项。由于您只想返回键,因此可以使用ProjectionExpression
参数来指定要返回的属性。
扫描
扫描操作通过访问表或二级索引中的每个项来返回一个或多个项和项属性。为了使DynamoDB返回较少的项,您可以提供FilterExpression操作。
ProjectionExpression
一个字符串,用于标识要从指定表或索引中检索的一个或多个属性。这些属性可以包括标量、集合或JSON文档的元素。表达式中的属性必须用逗号分隔。如果未指定属性名称,则将返回所有属性。如果找不到任何请求的属性,则它们不会出现在结果中。
主键 | 排序键 | 列1 | 列2 | 列3 |
---|---|---|---|---|
123 | abc | 数据 | 数据 | 数据 |
456 | def | 数据 | 数据 | 数据 |
789 | ghi | 数据 | 数据 | 数据 |
aws dynamodb scan \
--table-name MusicCollection \
--projection-expression "pk, sk"
主键 | 次键 |
---|---|
123 | abc |
456 | def |
789 | ghi |