2

我正在尝试执行 batch_get_item 以从表中请求多个项目。我正在关注 DynamoDB 文档中的 PHP 示例,但没有得到我期望的结果。

以下是代码:

$batch_array = array ();
$batch_array[]= array ('HashKeyElement'  =>
 array( AmazonDynamoDB::TYPE_STRING => 'V1L3M5O5L1W8R5B6D2Q1S8V0B3R8M7A6R0X0'));

$options = array (
    'RequestItems' => array(
        'profile_dev' => array (
            'Keys' => $batch_array
            )
    )
);

$result = $this->db->batch_get_item($options);

我没有得到数据,而是得到了一个很长的回复,并且我从它的尾部包含了相关信息:

[x-aws-body] => {"RequestItems":{"profile_dev":{"Keys":[{"HashKeyElement":{"S":"V1L3M5O5L1W8R5B6D2Q1S8V0B3R8M7A6R0X0"}}]}}} ) [body] => CFSimpleXML Object ( [__type] => com.amazon.coral.validate#ValidationException [message] => One or more parameter values were invalid: The provided key size does not match with that of the schema ) [status] => 400 ) ) 

此表的 hashKey 是一个字符串。它有一个 rangeKey,但我使用的是 hashKey,所以我可以获得与 hashKey 匹配的所有行。我错过了什么?

4

3 回答 3

6

DynamoDB 文档(和 SDK 示例)中存在大量错误。文档和实际的 SDK 代码仅使用 hashKeyElement,但实际上如果表同时具有 hashKey 和 rangeKey,则必须同时使用两者。

当我同时使用 hashKey 和 rangeKey 时,调用有效。

于 2012-12-12T05:44:11.140 回答
1

获取(或批量获取)要求您完全定义所获取的所有项目的键。如果您想使用单个调用检索具有相同 hashKey 的所有行,那么您似乎正在寻找 Query。

于 2012-12-12T09:16:27.030 回答
-1

你不需要使用BatchGet,你应该使用Query。这是一个使用 PHP SDK 获取表 'YourTable' 上具有 HASH 键 'YourHashKey' 的所有项目的示例

// Instantiate the class
$dynamodb = new AmazonDynamoDB();

$response = $dynamodb->query(array(
    'TableName' => 'YourTable', 
        'HashKeyValue' => array( AmazonDynamoDB::TYPE_STRING => 'YourHashKey' ),
));

参考:http ://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/LowLevelPHPQuerying.html

于 2012-12-12T18:11:08.000 回答