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

使用Python Lambda创建DynamoDB表报KeySchema属性数量不匹配错误

核心认知纠正

你的认知存在两处错误:

  • DynamoDB不存在单条记录最多存储10个属性的限制。单条项目(Item)的大小上限为400KB,除键属性外无强制属性数量限制,非键属性可以在写入数据时自由添加、修改、删除,不需要提前在表定义中声明。
  • AttributeDefinitions参数的作用不是声明表中所有要存储的属性,仅需要声明被主键(KeySchema)、本地二级索引、全局二级索引用到的键属性即可。

你提到的「KeySchema仅用于唯一标识记录,不需要纳入所有属性」的认知是正确的,分区键+范围键的组合必须全局唯一,用于定位单条数据。

报错原因

你收到的校验错误,直接原因是AttributeDefinitions中声明的属性数量和KeySchema用到的属性数量不匹配:你额外在AttributeDefinitions里加了未被主键/索引使用的agentName,触发了参数校验规则——创建表时AttributeDefinitions列出的属性必须和所有主键、索引用到的键属性完全一一对应,多传、少传、传错属性名/类型都会报这个错。
另外你的代码还有一处Python语法错误:TableName='CallCenterCallsTable, 字符串末尾缺失闭合单引号,修正参数错误后也要补上这个引号,否则代码会直接运行失败。

修正后可运行代码

移除AttributeDefinitions中多余的agentName配置,补全表名字符串的引号即可:

import json
import boto3
client = boto3.client("dynamodb")
def lambda_handler(event, context):  
    response = client.create_table(
        AttributeDefinitions=[
            {
                'AttributeName': 'agentId',
                'AttributeType': 'N'
            },
            {
                'AttributeName': 'agentRole',
                'AttributeType': 'S'
            }
        ],
        TableName='CallCenterCallsTable',
        KeySchema=[
            {
                'AttributeName': 'agentId',
                'KeyType': 'HASH'                
            },                
            {
                'AttributeName': 'agentRole',
                'KeyType': 'RANGE'
            }
        ],
        BillingMode='PROVISIONED',
        ProvisionedThroughput={
            'ReadCapacityUnits': 1,
            'WriteCapacityUnits': 1
        }
    )  
    print(response)
后续使用提示

表创建完成后,写入数据时可以直接添加agentName以及其他业务需要的属性,不需要修改表结构,只要单条项目总大小不超过400KB即可。如果后续需要创建二级索引,再在AttributeDefinitions中补充对应索引用到的键属性配置即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 02:27:30