Wie behebe ich den Fehler "provided key element does not match the schema" in DynamoDB?
Wenn ich versuche, eine GetItem-Anfrage für meine Amazon DynamoDB-Tabelle auszuführen, erhalte ich die folgende Fehlermeldung: "provided key element does not match the schema".
Kurzbeschreibung
Dieser Fehler kann aus den folgenden Gründen auftreten:
- Du hast den falschen Datentyp für den Schlüssel angegeben.
- Du hast Attribute falsch benannt.
- Du hast nur einen Teil eines Schlüssels angegeben.
- Die Daten werden in die falsche Tabelle geschrieben.
- Es gibt einen unnötigen zusätzlichen Schlüssel.
- Du führst eine GetItem-Anfrage aus, um zu versuchen, eine Reihe von Elementen anstelle eines einzelnen Elements abzurufen.
- Die Tabelle hat einen zusammengesetzten Primärschlüssel. Du führst also eine GetItem-Anfrage aus und gib den Partitionsschlüssel und den Sortierschlüssel nicht an.
- Die Tabelle hat keinen Sortierschlüssel, also führe eine GetItem-Anfrage aus und gib nur einen Partitionsschlüssel an.
Lösung
Den Primärschlüssel und Sortierschlüssel überprüfen
Damit der GetItem-Befehl erfolgreich ist, müssen die Primär- und Sortierschlüsseldaten denselben Datentyp haben wie die Daten für die DynamoDB-Tabelle. Im folgenden Beispielbefehl hat der Sortierschlüssel Jahr die Zeichenfolge (S) als Datentyp:
aws dynamodb get-item --table-name Key-Element --key '{"EventID":{"S":"test-item01"}, "Year":{"S":"2024"}}'
Da die Tabelle eine Zahl (N) als Datentyp verwendet, wird die folgende Fehlermeldung angezeigt:
"An error occurred (ValidationException) when calling the GetItem operation: The provided key element does not match the schema"
Führe stattdessen den folgenden Befehl aus, der eine Zahl als Datentyp verwendet:
aws dynamodb get-item --table-name Key-Element --key '{"EventID":{"S":"test-item01"}, "Year":{"N":"2024"}}'
Die Ausgabe sieht in etwa wie folgt aus:
{ "Item": { "EventID": { "S": "test-item01" }, "Year": { "N": "2024" }, "Works?": { "N": "1" } } }
Ein Vorgang für den Anwendungsfall wählen
Den BatchGetItem- oder GetItem-Vorgang verwenden
Wenn du Daten aus den DynamoDB-Tabellen abrufst, kannst du entweder die Vorgänge Getitem oder BatchGetItem verwenden. Der GetItem-Vorgang ruft jeweils einen Datensatz ab. Die Anfrage muss das Schlüsselschema der Tabelle enthalten.
Die ** BatchGetItem**-Operation erfordert, dass du den Partitionsschlüssel für Tabellen angibst, die nur einen Partitionsschlüssel haben. Für Tabellen, die einen zusammengesetzten Primärschlüssel haben, musst du die Partition und den Sortierschlüssel angeben, wenn du BatchGetItem verwendest.
Den Vorgang „Abfrage“ verwenden
Verwende den Vorgang Abfrage, um Daten abzurufen, ohne einen Sortierschlüssel anzugeben. Da du mit Abfrage nur den Partitionsschlüssel angeben kannst, wenn du Daten abrufst, verwende diesen Vorgang für Tabellen mit einem zusammengesetzten Primärschlüssel.
Die DynamoDB-Scan-API verwenden
Verwende die DynamoDB-Scan-API, um nach Daten zu suchen, die auf einem Nicht-Schlüsselattribut basieren. Mit dem Vorgang Scan kannst du einen FilterExpression verwenden, um Daten anhand eines Attributs zu filtern, ohne den Primärschlüssel angeben zu müssen.
Um ein Nicht-Schlüsselattribut für die Suche nach Daten zu verwenden, verwende eine verschachtelte Suche in FilterExpression. Um beispielsweise nach Elementen zu suchen, die ein Attribut userId im verschachtelten Attribut Daten haben, das einem bestimmten Wert entspricht, verwende den folgenden Ausdruck:
"Data.userId": your_expression_values."
Wichtig: Da der Vorgang Scan alle Elemente wiederholt, um zu überprüfen, ob die Filterbedingung erfüllt ist, können für den Vorgang schnell Gebühren anfallen. Wenn du den Vorgang Scan verwenden musst, füge beim Scannen großer Tabellen eine Paginierung hinzu. Die Scan-API gibt nur bis zu 1 MB an Daten pro Aufruf zurück. Verwende die Paginierung, um nur neue Daten zu scannen.
- Themen
- Database
- Tags
- Amazon DynamoDB
- Sprache
- Deutsch
Ähnliche Videos


Relevanter Inhalt
AWS OFFICIALAktualisiert vor 4 Jahren
AWS OFFICIALAktualisiert vor 2 Jahren