PHP通过AWS SDK调用DynamoDB getItem()遇schema不匹配错误
解决DynamoDB getItem调用报错「The provided key element does not match the schema」
你的问题根源很明确:DynamoDB的getItem接口要求必须传入完整的复合主键——也就是你定义的分区键ResidentUUID加上排序键ResidentName,只传其中一个不符合表的主键结构,所以会返回400错误。
两种可行的解决方式:
- 如果你明确知道目标记录的完整主键值,直接在getItem参数中同时传入两个键:
$client = new Aws\DynamoDb\DynamoDbClient([ 'region' => '你的AWS区域', 'version' => 'latest' ]); $result = $client->getItem([ 'TableName' => 'NeedsSystemData', 'Key' => [ 'ResidentUUID' => ['S' => '你的测试UUID'], 'ResidentName' => ['S' => '你的测试姓名'] ] ]);
- 如果你只知道分区键,想获取该分区下的所有记录,改用query接口(query是针对分区键的高效查询,比scan更适合这种场景):
$result = $client->query([ 'TableName' => 'NeedsSystemData', 'KeyConditionExpression' => 'ResidentUUID = :uuid', 'ExpressionAttributeValues' => [ ':uuid' => ['S' => '你的测试UUID'] ] ]);
另外提一句:scan能正常返回是因为它是全表扫描,不依赖主键匹配,但scan性能差、读写成本高,非必要场景不建议使用。
内容的提问来源于stack exchange,提问作者Galathir Darkstone
相关产品推荐
相关产品推荐

