【问题标题】:multiple secondary index for dynamoDB querydynamoDB 查询的多个二级索引
【发布时间】:2017-09-21 16:10:10
【问题描述】:

我希望使用我在查询中创建的二级索引来请求我的 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/

【问题讨论】:

  • 你的意思是在单个查询参数上使用多个二级索引?
  • 是的@notionquest

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


【解决方案1】:

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

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

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

投影类型:全部

GSI 查询示例:-

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

【讨论】:

  • 感谢您的回答,但我不知道如何构建我的请求。你能用我的案例@notionquest 给我看一个例子吗?
  • 两者都是关键属性
  • 我已经更新了对我来说很好的示例 GSI 查询。如果某些东西不适合您,请在 OP 上添加错误消息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
相关资源
最近更新 更多