2016-05-30 11 views
1

Ich Ausführung folgende DynamoDB Abfrage param aws-Dynamo-Bibliothek in C.Amazon DynamoDB Validation

{ "TableName": "table4", "KeyConditionExpression": "#yr = :yyyy and ts between :letter1 and :letter2", "ExpressionAttributeNames": { "#yr": "userid" }, "ExpressionAttributeValues": { ":yyyy": "abc", ":letter1": 1, ":letter2": 2 } } 

mit, aber ich habe Fehler

"__type":"com.amazon.coral.validate#ValidationException","message":"1 validation error detected: Value null at 'hashKeyValue' failed to satisfy constraint: Member must not be null" 

dies ist meine Tabellenstruktur

table4 
{ 
    "Table": { 
     "TableSizeBytes": 66, 
     "KeySchema": [ 
      { 
       "AttributeName": "userid", 
       "KeyType": "HASH" 
      }, 
      { 
       "AttributeName": "ts", 
       "KeyType": "RANGE" 
      } 
     ], 
     "CreationDateTime": 1464617195.039, 
     "ItemCount": 3, 
     "AttributeDefinitions": [ 
      { 
       "AttributeName": "ts", 
       "AttributeType": "N" 
      }, 
      { 
       "AttributeName": "userid", 
       "AttributeType": "S" 
      } 
     ], 
     "ProvisionedThroughput": { 
      "ReadCapacityUnits": 1, 
      "WriteCapacityUnits": 1, 
      "LastDecreaseDateTime": 1464683346.007, 
      "NumberOfDecreasesToday": 1 
     }, 
     "TableStatus": "ACTIVE", 
     "TableName": "table4", 
     "TableArn": "arn:aws:dynamodb:us-east-1:456456456:table/table4" 
    } 
} 
+1

Was ist der Verteilungsschlüssel und Schlüssel der Tabelle sortieren? Haben Sie das Partitionsschlüsselfeld in die KeyConditionExpression aufgenommen? – notionquest

+0

Partition key = Benutzer-ID, sortkey = ts –

Antwort

0

Der Partitionsschlüssel muss in keyconditionexpression enthalten sein. Bitte schließen Sie den Partitionsschlüssel ein und versuchen Sie es. Wenn Sie die Dynamodb abfragen, ist der Partitionsschlüssel zwingend erforderlich. Wenn Sie das Dynamodb scannen, ist der Partitionsschlüssel optional. Dies ist der Hauptunterschied zwischen Abfrage und Scan in dynamodb.

+0

Ich habe bereits Partition Schlüssel (userid) in meinem keyconditionexpression hinzugefügt. –

+0

Könnten Sie bitte den Befehl describe table ausführen und die Tabellenstruktur hier einfügen? – notionquest

+0

Ich habe in meiner Frage –

0

Hier ist die funktionierende Abfrage und Tabellenstruktur.

{ TableName: 'table4', 
KeyConditionExpression: '#userid = :userid AND #ts between :ts1 AND :ts2', 
ExpressionAttributeNames: { '#userid': 'userid', '#ts': 'ts' }, 
ExpressionAttributeValues: { ':userid': 'user1', ':ts1': 1, ':ts2': 2 } } 

Abfrage Ausgabe: -

{"userid":{"S":"user1"},"ts":{"N":"1"}} 

Tabellenstruktur: -

{"Table":{"AttributeDefinitions": 
     [{"AttributeName":"userid","AttributeType":"S"}, 
    {"AttributeName":"ts","AttributeType":"N"}], 
"TableName":"table4","KeySchema": 
[{"AttributeName":"userid","KeyType":"HASH"},{"AttributeName":"ts","KeyType":"RANGE"}], 
"TableStatus":"ACTIVE", 
"CreationDateTime":"2016-05-31T12:46:08.351Z", 
"ProvisionedThroughput":{"LastIncreaseDateTime":"1970-01-01T00:00:00.000Z","LastDecreaseDateTime":"1970-01-01T00:00:00.000Z","NumberOfDecreasesToday":0, 
"ReadCapacityUnits":10,"WriteCapacityUnits":10}, 
"TableSizeBytes":15,"ItemCount":1,"TableArn": 
"arn:aws:dynamodb:ddblocal:000000000000:table/table4"}} 
+0

Tabellenstruktur hinzugefügt. Löst das Ihr Problem? Wenn ja, könnten Sie bitte die Antwort akzeptieren? – notionquest