Python AWS dynamoDB:如何在非主列上使用过滤器查询元素?

Python AWS dynamoDB: how can I query elements with a filter on not primary column?

我使用 dynamoDB 为应用存储数据。

实际上: 我正在从我的 dynamodb 加载所有数据(使用 .scan())然后我在本地过滤数据。

问题:加载值花费太多时间。

解决方案: 仅加载过滤后的数据。 我无法使用这样的查询:

# Use the Table resource to query for all songs by artist Arturus Ardvarkian
response = table.query(
  KeyConditionExpression=Key('artist').eq('Arturus Ardvarkian')
)
print(response['Items'])

他们总是说 botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the Query operation: Query condition missed key schema element: mail

您可以在 DynamoDB 中创建本地或全局二级索引 table。从您的角度来看,这就像有不同的 table 定义(即 table 键),但附加到相同的数据。

这样您就可以使用查询而不是过滤扫描结果。

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LSI.html

具体选择(LSI 与 GSI)取决于您的用例,您可以在此处找到两者之间的比较:

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SecondaryIndexes.html