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
我使用 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