2015-08-05 8 views
7

Sto cercando di interrogare la mia tabella dynamodb per ottenere feed_guid e status_id = 1. Ma restituisce l'errore di condizione della chiave Query non supportato. Si prega di trovare il mio schema di tabella e query.Errore query Dynamodb - Condizione chiave chiave non supportata

$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 
      ) 
     )); 

Di seguito è la mia query per aggiornare quella tabella.

$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

non avete definire status_id come gamma per eseguire questa query –

+0

in modo che possiamo solo non è utente indici secondari? –

risposta

8

Come accennato, l'attributo incluso nella "KeyConditionExpression" dovrebbe essere solo la chiave hash, che corrispondono ai schema della tabella di base (in questo caso 'feed_guid'). Se si desidera eseguire una query sia su feed_guid che su 'status_id', è necessario creare la tabella con hash e chiave di intervallo e specificare 'status_id' come chiave di intervallo.

Gli indici secondari globali sono completamente separati dalla tabella di base, quindi in questo caso è possibile interrogare gli indici separatamente (utilizzare 'status_id' in condizione chiave quando si esegue una query su StatusIndex e utilizzare 'user_id' in condizione chiave durante l'interrogazione di UserIdIndex).

Si prega di trovare maggiori dettagli su interrogazione indici secondari globali here