不重复地获取 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 的独特性至少可以通过两种方式实现。

  1. 主键 - 在主键结构中包含唯一属性。
  2. 通过在创建项目时强制执行约束(例如,使用 ConditionExpressionattribute_not_exists 强制执行唯一性)。

如果您希望 公司属性在整个 table 中重复出现(这完全没问题),您可以考虑创建一个以公司名称作为一部分的二级索引的主键。例如,您可以将主键定义为 COMPANIES 的分区键和公司名称的排序键。这样,您就可以查询 COMPANIES 分区并获得公司名称的唯一列表。