PHP调用DynamoDB getItem接口遇键元素与Schema不匹配错误求助
DynamoDB GetItem 报错:提供的键元素与架构不匹配
问题概述
调用DynamoDB的GetItem接口获取数据时,返回400 Bad Request错误,提示「提供的键元素与架构不匹配」。
数据示例
{ "section_id": "6177d23bb5f04ca363fe3d91", "chapter_id": "6177ccd4b5f04ca363fe3d63", "data": { } }
调用代码
$sdk = $this->sdk(); $dynamodb = $sdk->createDynamoDb(); $result = $dynamodb->getItem( array( 'TableName' => 'sections', 'Key' => array( 'section_id' => array( 'S' => '6177d23bb5f04ca363fe3d91' ) ) ) ); print_r($result); exit;
错误信息
类型: Aws\DynamoDb\Exception\DynamoDbException 消息: 执行 "GetItem" 接口时出错,请求地址:https://dynamodb.ap-south-1.amazonaws.com;AWS HTTP错误:客户端错误:`POST https://dynamodb.ap-south-1.amazonaws.com` 返回 `400 Bad Request` 响应:{"__type":"com.amazon.coral.validate#ValidationException","message":"提供的键元素与架构不匹配"(已截断...)ValidationException (客户端): 提供的键元素与架构不匹配 - {"__type":"com.amazon.coral.validate#ValidationException","message":"提供的键元素与架构不匹配"}
解决方案
DynamoDB的GetItem接口要求必须传入完整的主键(如果是复合主键,则需要同时提供分区键和排序键)。从数据示例可以看出,sections表的主键是复合主键:section_id为分区键,chapter_id为排序键。原代码只传入了section_id,缺少排序键chapter_id,导致与表的架构不匹配。
修改后的代码如下:
$sdk = $this->sdk(); $dynamodb = $sdk->createDynamoDb(); $result = $dynamodb->getItem( array( 'TableName' => 'sections', 'Key' => array( 'section_id' => array( 'S' => '6177d23bb5f04ca363fe3d91' ), 'chapter_id' => array( 'S' => '6177ccd4b5f04ca363fe3d63' ) ) ) ); print_r($result); exit;
内容的提问来源于stack exchange,提问作者Sathishkumar
相关产品推荐
相关产品推荐

