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

Get (またはバッチ get) では、取得するすべてのアイテムのキーを完全に定義する必要があります。単一の呼び出しを使用して同じ hashKey を持つすべての行を取得する場合は、Query を探しているようです。

于 2012-12-12T09:16:27.030 に答える
-1

を使用する必要はありません。使用する必要がありBatchGetますQuery。PHP SDK を使用して、テーブル 'YourTable' のハッシュ キー '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 に答える