2015-08-05 4 views
7

Ich versuche, meine Dynamodb-Tabelle abzufragen, um feed_guid und status_id = 1 zu erhalten. Aber es gibt Abfrage Schlüsselbedingung nicht unterstützt Fehler. Finden Sie meine Tabelle Schema und Abfrage.Dynamodb Query-Fehler - Schlüsselabfrage nicht unterstützt

$result =$dynamodbClient->createTable(array(
      'TableName' => 'feed', 
      'AttributeDefinitions' => array(
       array('AttributeName' => 'user_id', 'AttributeType' => 'S'), 
       array('AttributeName' => 'feed_guid', 'AttributeType' => 'S'), 
       array('AttributeName' => 'status_id', 'AttributeType' => 'N'), 
      ), 
      'KeySchema' => array(
       array('AttributeName' => 'feed_guid', 'KeyType' => 'HASH'), 
      ), 

      'GlobalSecondaryIndexes' => array(
       array(
        'IndexName' => 'StatusIndex', 
        'ProvisionedThroughput' => array (
         'ReadCapacityUnits' => 5, 
         'WriteCapacityUnits' => 5 
        ), 
        'KeySchema' => array(
         array(
          'AttributeName' => 'status_id', 
          'KeyType' => 'HASH' 
         ), 
        ), 
        'Projection' => array(
         'ProjectionType' => 'ALL' 
        ) 
       ), 

       array(
        'IndexName' => 'UserIdIndex', 
        'ProvisionedThroughput' => array (
         'ReadCapacityUnits' => 5, 
         'WriteCapacityUnits' => 5 
        ), 
        'KeySchema' => array(
         array(
          'AttributeName' => 'user_id', 
          'KeyType' => 'HASH' 
         ), 
        ), 
        'Projection' => array(
         'ProjectionType' => 'ALL' 
        ) 
       ) 

      ), 
      'ProvisionedThroughput' => array(
       'ReadCapacityUnits' => 10, 
       'WriteCapacityUnits' => 20 
      ) 
     )); 

Folgendes ist meine Abfrage, diese Tabelle zu aktualisieren.

$result = $dynamodbClient->query(array(
      'TableName' => 'feed', 
      'KeyConditionExpression' => 'feed_guid = :v_fid AND status_id = :v_sid ', 
      'ExpressionAttributeValues' => array(
       ':v_fid' => array('S' => '71a27f0547cd5456d9ee7c181b6cb2f8'), 
       ':v_sid' => array('N' => 1) 
      ), 
      'ConsistentRead' => false 
     )); 
+0

Sie haben nicht status_id als Bereich definieren diese Abfrage auszuführen –

+0

So können wir nicht vom Benutzer Sekundärindizes nur? –

Antwort

8

Wie bereits erwähnt, enthielt das Attribut in „KeyConditionExpression“ Ihr Hash-Schlüssel nur sein sollte, für Ihr Basistabellenschema (in diesem Fall ‚feed_guid‘). Wenn Sie sowohl 'feed_guid' als auch 'status_id' abfragen möchten, müssen Sie die Tabelle mit Hash- und Bereichsschlüssel erstellen und 'status_id' als Bereichsschlüssel angeben.

Globale Sekundärindizes sind vollständig von der Basistabelle getrennt. In diesem Fall können Sie die Indizes separat abfragen (verwenden Sie 'status_id' in Schlüsselbedingung beim Abfragen von StatusIndex und verwenden Sie 'user_id' in Schlüsselbedingung beim Abfragen von UserIdIndex).

finden Sie weitere Details zu den Abfragen von globaler Sekundärindizes here