当前位置: 首页 > 知识库问答 >
问题:

如何在无服务器框架中使用全局二级索引定义DynamoDB表

阚通
2023-03-14
  • awsquiestID(S)
  • ttl(N)
  • createdate(S)(ISO)
  • user_id(S)
  • 消息(S)

我想有一个全局二级索引,这样我就可以查询过滤用户的所有消息,我让他们排序(使用排序键),如https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html

resources:
  Resources:
    EventsTable:
      Type: AWS::DynamoDB::Table
      Properties:
        TableName: ${self:custom.eventsTable}
        AttributeDefinitions:
          - AttributeName: awsRequestID
            AttributeType: S
          - AttributeName: ttl
            AttributeType: N
          - AttributeName: createdate
            AttributeType: S
          - AttributeName: user_id
            AttributeType: S
          - AttributeName: message
            AttributeType: S
        KeySchema:
          - AttributeName: awsRequestID
            KeyType: HASH
        GlobalSecondaryIndexes:
          - IndexName: UserIdIndex
            KeySchema:
              - AttributeName: user_id
                KeyType: HASH
              - AttributeName: createdate
                KeyType: RANGE
            Projection:
              ProjectionType: 'ALL'
        TimeToLiveSpecification:
          AttributeName: ttl
          Enabled: true
        BillingMode: PAY_PER_REQUEST

出现错误:EventsTable-属性AttributeDefinitions与表和辅助索引的KeySchema不一致。

共有1个答案

勾渝
2023-03-14

显然正确的语法是这样的。

这些是错误:

  • 您不能将ttl列添加到属性定义(否则您会得到问题的错误)
  • 在属性定义中必须有全局辅助索引所需的列(否则会得到完全相同的错误)
  • 属性定义中不能有额外的列(消息)(都给出完全相同的错误消息)
resources:
  Resources:
    EventsTable:
      Type: AWS::DynamoDB::Table
      Properties:
        TableName: ${self:custom.eventsTable}
        AttributeDefinitions:
          - AttributeName: awsRequestID
            AttributeType: S
          - AttributeName: user_id
            AttributeType: S
          - AttributeName: createdate
            AttributeType: S
        KeySchema:
          - AttributeName: awsRequestID
            KeyType: HASH
        GlobalSecondaryIndexes:
          - IndexName: UserIdIndex
            KeySchema:
              - AttributeName: user_id
                KeyType: HASH
              - AttributeName: createdate
                KeyType: RANGE
            Projection:
              ProjectionType: 'ALL'
        TimeToLiveSpecification:
          AttributeName: ttl
          Enabled: true
        BillingMode: PAY_PER_REQUEST
 类似资料:
  • 我是AWS DynamoDB和nosql的新手,我对表创建有问题。 我试图创建一个名为的表,具有以下属性: 用户ID(HASH) OSType(范围) MSISDN IMSI 设备ID 我不仅需要通过查询表,还需要通过以下字段查询表: MSISDN 我的逻辑如下: 通过字段查询表 在阅读了有关LSI/GSI的手册后,我很难理解如何创建表和定义这些索引。 这是我尝试使用PHP AWS SDK创建表的

  • 我有以下带有三个全局二级索引(GSI)的DyamoDB表 Id(主键)、user_id(GSI)、event_type(GSI)、product_id(GSI)、rate、create_date 我有以下三种查询模式: null null

  • 我在Dynamodb中有一个表,我试图通过命名全局二级索引来获取一个项目(使用),但我得到了错误: 我的问题是: 但后来我查看了get文档,它没有属性。所以我想也许我应该命名GSI而不是表名: 但后来我面对: 这意味着不被识别为全局表。所以我的问题是,拥有操作列表: 批量获取 批量写入 createSet 删除 得到 把 查询 扫描 更新 哪些支持GSI和LSI?此外,如果您想使用GSI检索一个特

  • AWS CLI for Dynamodb创建表在创建全局二级索引时有点混乱。在CLI文档中,它表示全局二级索引可以用以下表达式(简写)表示: 我的解释是,我应该这样做 请注意,我在这里不包括KeySchema来推断复杂性。控制台显示以下错误: 因此AWS CLI无法识别ProvisionedThroughput的映射表达式。我尝试了几种表达方式,但都没能成功。我也没有在谷歌上找到任何描述如何做的网

  • 无服务器错误------------------------------------------我已经返回并转发了文档。似乎这应该是一件简单的事情,但不明白为什么它不让我 出现错误:文件表-一个或多个参数值无效:某些索引键属性未在属性定义中定义。密钥:[UserId],属性定义:[userId,id](服务:Amazon DynamoDBv2;状态代码:400;错误代码:ValidationExc

  • 我仍然对本地二级索引的使用感到困惑。当需要LSI与GSI时,请给我具体的用例。 例如,“GenreAlbumTitle”索引应该是GSI还是LSI?https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.Prim