DynamoDB:列出所有分区键

16

我想更新DynamoDB中的内容,为此需要迭代表中已有的分区键。有没有办法使用Python仅获取分区键列表。扫描和查询仅适用于我的表属性。有没有办法获取表的所有分区键?

3个回答

11

如果你的表除了使用分区键外还使用排序键(换句话说,如果这些键是由分区键和排序键组合而成),那么答案是:不行——没有办法查询或扫描只有分区键。需要澄清的是,你仍然可以通过一个只返回键的投影来扫描你的表,但它将为每个具有不同排序键的相同主键的项多次返回每个主键。

如果你的表模式只使用分区键(没有排序键),那么你可以编写一个只包含主键的投影的扫描,因此得到分区键列表作为结果。


好的,正如我在答案中提到的那样,没有办法仅查询不同的分区键。您必须进行扫描以确定这些键。 - Mike Dinescu
它使用投影工作,我能够仅使用分区键检索 - 谢谢 - WPrathamesh
这里有一些重要的事情需要注意,你不能仅查询分区键,无论是去重还是不去重。 - Ali_Nass
2
AWS在发布了一些智能技术后,几年过去了,这些技术可以更高效地列出所有分区键:https://aws.amazon.com/blogs/database/generate-a-distinct-set-of-partition-keys-for-an-amazon-dynamodb-table-efficiently/ - MrTJ

2

2

概述

要获取表中的所有分区键,您需要使用Scan,它将读取表中的所有项。由于您只想返回键,因此可以使用ProjectionExpression参数来指定要返回的属性。

扫描

扫描操作通过访问表或二级索引中的每个项来返回一个或多个项和项属性。为了使DynamoDB返回较少的项,您可以提供FilterExpression操作。

ProjectionExpression

一个字符串,用于标识要从指定表或索引中检索的一个或多个属性。这些属性可以包括标量、集合或JSON文档的元素。表达式中的属性必须用逗号分隔。如果未指定属性名称,则将返回所有属性。如果找不到任何请求的属性,则它们不会出现在结果中。


解决方案

我的表格
主键 排序键 列1 列2 列3
123 abc 数据 数据 数据
456 def 数据 数据 数据
789 ghi 数据 数据 数据
使用ProjectionExpression进行扫描
aws dynamodb scan \
    --table-name MusicCollection \
    --projection-expression "pk, sk"
响应
主键 次键
123 abc
456 def
789 ghi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接