You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DynamoDB全局二级索引(GSI)投影属性查询异常求助

问题原因分析

你遇到的这个问题,核心是全局二级索引(GSI)的非键属性投影配置格式错误。

看你提供的describe-table返回结果,NonKeyAttributes的值是一个单独的字符串:"AgentId, TicketId, TotalSecondsSinceOpen",但DynamoDB要求这个字段必须是字符串数组,每个元素对应一个要投影的属性名。

DynamoDB会把这个单个字符串当成一个完整的属性名去处理——也就是说,它并没有投影AgentId、TicketId、TotalSecondsSinceOpen这三个属性,而是尝试投影一个名为AgentId, TicketId, TotalSecondsSinceOpen的属性(显然这个属性不存在)。所以当你在Query请求中引用这三个属性时,DynamoDB会提示索引未投影这些属性。

解决步骤

由于DynamoDB不支持直接修改已存在GSI的投影配置,你需要删除现有GSI后重新创建:

  1. 删除错误的GSI
    执行update-table命令删除Id-AddedOn-index:

    aws dynamodb update-table \
      --table-name 你的表名 \
      --global-secondary-index-updates '[{"Delete": {"IndexName": "Id-AddedOn-index"}}]'
    

    等待索引状态变为DELETED(可通过describe-table确认)。

  2. 重新创建正确配置的GSI
    重新创建GSI时,将NonKeyAttributes设置为字符串数组,每个属性单独作为一个元素:

    aws dynamodb update-table \
      --table-name 你的表名 \
      --global-secondary-index-updates '[
        {
          "Create": {
            "IndexName": "Id-AddedOn-index",
            "KeySchema": [
              {"AttributeName": "Id", "KeyType": "HASH"},
              {"AttributeName": "AddedOn", "KeyType": "RANGE"}
            ],
            "Projection": {
              "ProjectionType": "INCLUDE",
              "NonKeyAttributes": ["AgentId", "TicketId", "TotalSecondsSinceOpen"]
            },
            "ProvisionedThroughput": {"ReadCapacityUnits": 5, "WriteCapacityUnits": 5}
          }
        }
      ]'
    

    注意替换ProvisionedThroughput的值为你实际需要的容量,或者如果是按需模式可以省略这个参数。

  3. 等待GSI同步完成
    执行describe-table查看IndexStatus,当状态变为ACTIVE时,GSI就可以正常使用了。

验证配置

重建完成后,再次执行describe-table,你应该会看到NonKeyAttributes是三个独立的字符串元素:

"NonKeyAttributes": ["AgentId", "TicketId", "TotalSecondsSinceOpen"]

这时再执行Query请求,就不会再出现投影属性缺失的错误了。

内容的提问来源于stack exchange,提问作者Boris Barvish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:40:15