2016-04-26 15 views
1

Beim Versuch, eine über AWS Java SDK zu tun löschen erhalte ich die FehlerAWS DynamoDB Löschen über Java SDK

Das bereitgestellte Schlüsselelement nicht mit dem Schema übereinstimmen (Service: AmazonDynamoDBv2; Statuscode: 400; Fehlercode : Validation; ID anfordern: 52N303HS3D535K28KSN3R3803VVV4KQNSO5AEMVJF66Q9ASUAAJG)

ich ein Lösch Artikel spec definiert haben, die wie folgt

DeleteItemSpec deleteItemSpec = new DeleteItemSpec() 
      .withPrimaryKey("pk", messageId) 
      .withConditionExpression("#ip > :val") 
      .withNameMap(new NameMap() 
        .with("#ip", "timestamp")) 
      .withValueMap(new ValueMap() 
        .withNumber(":val", 0)) 
      .withReturnValues(ReturnValue.NONE); 

sieht Und meine Tabelle ist so erstellt

Ich frage mich, ob der Sortierschlüssel für Zeitstempel dieses Problem verursacht. Muss ich einen anderen Zeitstempel als> 0 angeben?

Antwort

2

Das Problem besteht darin, dass Sie den Hash- und den Bereichsschlüssel beim Löschen eines Objekts angeben müssen. Ihr Hash-Schlüssel ist "pk" und Ihr Bereichsschlüssel ist "timestamp", aber Sie geben den Hash-Schlüssel nur in die withPrimaryKey-Methode ein.

Es sieht so aus, als ob Sie versuchen, mehrere Elemente gleichzeitig zu löschen. Dies ist mit DynamoDB nicht möglich. Sie müssen zuerst eine Abfrage für den Schlüssel ausführen und Sie können Ihren Bedingungsausdruck darauf anwenden, um nur die Schlüssel der Elemente abzurufen, die Sie löschen möchten. Sie müssen dann jedoch die Lösch-API für jeden Datensatz einzeln aufrufen oder die Stapel-API verwenden, um Datensätze in Stapeln zu löschen und dabei den Hash- und Bereichsschlüssel für jedes einzelne Element anzugeben.

Verwandte Themen