PHP调用AWS DynamoDB getItem报键与schema不匹配错误如何解决
问题原因及解决方案
你遇到的The provided key element does not match the schema报错属于DynamoDB主键参数校验失败,结合scan接口可正常调用的特征,可按以下优先级排查:
1. 最可能原因:表使用了复合主键
DynamoDB的getItem接口要求必须传入完整的主键值:
- 如果表是单主键(仅分区键),只传分区键即可
- 如果表是复合主键(分区键+排序键),必须同时传入分区键和排序键两个参数,缺一个就会报上述错误
scan接口不需要指定主键,所以不会触发该校验,符合你当前的表现。
你可以到DynamoDB控制台的表结构页确认是否存在排序键,如果有,在Key参数中补全排序键的配置即可,示例如下(假设排序键名为timestamp,类型为数字N):
$response = $clientDB->getItem([ 'TableName' => 'mytable', "ConsistentRead" => true, 'Key' => [ 'deviceId' => ['S' => 'mydata'], 'timestamp' => ['N' => '1699999999'] // 替换为实际排序键名、类型、对应值 ] ]);
2. 其次排查:主键属性类型不匹配
确认表中deviceId的属性类型是否和你代码中声明的一致:
- 如果你代码中写的是
['S' => 'mydata'](字符串类型),但表中deviceId实际是数字类型N,就会触发校验失败 - 注意DynamoDB的数字类型传值时也要用字符串包裹,示例:
['N' => '12345']
3. 罕见情况:环境/表名对应错误
确认你当前调用的表和你核对schema的表为同一环境同一张表,避免出现开发/测试/生产环境表schema不一致的情况。
内容的提问来源于stack exchange,提问作者Lucas Martini
相关产品推荐
相关产品推荐

