不重复地获取 dynamo table 中一个属性的所有值的列表
Get list of all values of an attribute in dynamo table without repeating
I have a dynamodb table like this
name company
Juan comp1
Camilo comp2
Andres comp1
... ...
我想使用 boto3 和 python3.8:
得到这样的数组
[comp1, comp2]
有没有办法避免查询所有行然后过滤重复项?
除非公司是主键结构的一部分,否则您将必须scan
整个table来确定company
属性的所有唯一值。如果获取唯一 company
项目的列表是您应用程序中的核心访问模式,您应该考虑以不同方式存储数据。
DynamoDB 的独特性至少可以通过两种方式实现。
- 主键 - 在主键结构中包含唯一属性。
- 通过在创建项目时强制执行约束(例如,使用
ConditionExpression
和 attribute_not_exists
强制执行唯一性)。
如果您希望 公司属性在整个 table 中重复出现(这完全没问题),您可以考虑创建一个以公司名称作为一部分的二级索引的主键。例如,您可以将主键定义为 COMPANIES 的分区键和公司名称的排序键。这样,您就可以查询 COMPANIES 分区并获得公司名称的唯一列表。
I have a dynamodb table like this
name company
Juan comp1
Camilo comp2
Andres comp1
... ...
我想使用 boto3 和 python3.8:
得到这样的数组[comp1, comp2]
有没有办法避免查询所有行然后过滤重复项?
除非公司是主键结构的一部分,否则您将必须scan
整个table来确定company
属性的所有唯一值。如果获取唯一 company
项目的列表是您应用程序中的核心访问模式,您应该考虑以不同方式存储数据。
DynamoDB 的独特性至少可以通过两种方式实现。
- 主键 - 在主键结构中包含唯一属性。
- 通过在创建项目时强制执行约束(例如,使用
ConditionExpression
和attribute_not_exists
强制执行唯一性)。
如果您希望 公司属性在整个 table 中重复出现(这完全没问题),您可以考虑创建一个以公司名称作为一部分的二级索引的主键。例如,您可以将主键定义为 COMPANIES 的分区键和公司名称的排序键。这样,您就可以查询 COMPANIES 分区并获得公司名称的唯一列表。