dynamoDB查询的多个二级索引

时间:2017-08-14 11:10:21

标签: python-2.7 amazon-web-services amazon-dynamodb boto3

我希望使用我在查询中创建的二级索引来请求我的DynamoDB表。

截至目前,对于我正在做的单个二级索引:

response = dynamodb.Table('TABLE').query(
    IndexName='permaname-index',
    KeyConditionExpression=Key('permaname').eq(permaname)
)

我会像这样构建我的KeyConditionExpression:

KeyConditionExpression=Key('permaname').eq(permaname) & Key('source').eq(source)

我一遍又一遍地阅读这篇文档,但我无法弄清楚该怎么做:

https://docs.aws.amazon.com/fr_fr/amazondynamodb/latest/gettingstartedguide/GettingStarted.Python.04.html

https://boto3.readthedocs.io/en/latest/

1 个答案:

答案 0 :(得分:2)

DynamoDB查询(即查询API参数)可以一次从单个资源(即表或GSI)获取数据。换句话说,您无法在单个Query参数中从多个表或GSI中检索数据。 DynamoDB Query一次只能引用一个资源。

与可以引用多个表的RDBMS不同,DynamoDB不能同时引用多个表或GSI(即在单个查询中)。

由于这个原因,DynamoDB具有在GSI的主表中包含所有属性的功能。在为表创建GSI时,可以使用ProjectionType将表中的所有属性包含在GSI中。

  

ProjectionType:ALL

GSI查询示例: -

response = table.query(
    IndexName='Movies_Gsi',
    KeyConditionExpression=Key('title').eq('Movie with nested map') & Key('yearkey').eq(2017)
)