DynamoDB BatchGetItem mit der AWS CLI
aws dynamodb batch-get-item holt bis zu 100 Items per Primary Key in einem einzigen Befehl. Zwei Dinge unterscheiden den Befehl von query und scan auf der Kommandozeile: Die Keys sind verschachteltes DynamoDB-JSON, das du durch das Shell-Quoting bringen musst, und die CLI leert UnprocessedKeys nicht für dich. Die Limits und die Regeln für Teilergebnisse stehen in Batch-Operationen in DynamoDB.
Code
aws dynamodb batch-get-item \
--request-items '{
"Music": {
"Keys": [
{"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}},
{"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "A Mis Abuelos"}},
{"Artist": {"S": "Ella Fitzgerald"}, "SongTitle": {"S": "Misty"}}
]
}
}'Gekürzt bildet die Ausgabe jede Tabelle auf die gefundenen Items plus etwaige Reste ab. Der vollständige, wortgetreue Lauf steht weiter unten auf der Seite:
{
"Responses": {
"Music": [
{"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}, ...}
]
},
"UnprocessedKeys": {}
}Erklärung
- Die CLI hat für diesen Befehl keine Paginierungsmechanik.
aws dynamodb query helplistet--starting-token,--max-itemsund--page-size;aws dynamodb batch-get-item helplistet keinen der drei.UnprocessedKeysist kein Paginierungs-Token, und die CLI behandelt den Aufruf als einmalig — das Abarbeiten ist also deine Shell-Schleife, kein Flag. - Die Restmenge hat bereits das Eingabeformat. Ein nicht leeres
UnprocessedKeyslässt sich ohne Umformung direkt wieder als--request-itemseinspeisen, und genau das macht einewhile-Schleife in Bash erträglich. Warte zwischen den Versuchen; ein sofortiger neuer Lauf trifft dieselbe gedrosselte Partition. ProjectionExpressionundConsistentReadgehören in das Objekt der jeweiligen Tabelle, neben"Keys". Sie auf die oberste Ebene von--request-itemszu setzen, ist hier der häufigste Formfehler.- Halte die Map in einer Datei.
--request-items file://keys.jsonumgeht das Shell-Quoting vollständig und ist ab einer Handvoll Keys die einzige vernünftige Option. Es ist auch der Weg, auf dem du die 100-Key-Grenze erreichst, ohne es zu merken.
Was der Befehl tatsächlich ausgibt
Der obige Block, wortgetreu gegen DynamoDB Local 3.3.0 mit allen drei Songs ausgeführt (aws-cli/2.36.9):
{
"Responses": {
"Music": [
{
"Artist": {"S": "Arturo Sandoval"},
"AlbumTitle": {"S": "Danzon"},
"Year": {"N": "1994"},
"SongTitle": {"S": "A Mis Abuelos"}
},
{
"Artist": {"S": "Ella Fitzgerald"},
"AlbumTitle": {"S": "Ella in Berlin"},
"Year": {"N": "1960"},
"SongTitle": {"S": "Misty"}
},
{
"Artist": {"S": "Arturo Sandoval"},
"AlbumTitle": {"S": "Danzon"},
"Year": {"N": "1994"},
"SongTitle": {"S": "Cubano Chant"}
}
]
},
"UnprocessedKeys": {}
}(Attribut-Maps jeweils auf eine Zeile gefaltet; alles andere ist so, wie es ausgegeben wurde.) Der Befehl hat Cubano Chant zuerst angefragt und zuletzt bekommen. Nichts an der Antwort ist positionsabhängig, ein jq-Ausdruck, der .Responses.Music[0] indiziert, liest also genau das Item, das der Dienst gerade zuerst zurückgeben wollte. Filtere stattdessen über die Key-Attribute.
Zwei Anfragen lehnt er rundheraus ab, ausgegeben auf stderr mit Exit-Status 254:
aws: [ERROR]: An error occurred (ValidationException) when calling the BatchGetItem operation: Provided list of item keys contains duplicates
aws: [ERROR]: An error occurred (ValidationException) when calling the BatchGetItem operation: Too many items requested for the BatchGetItem callDas Präfix aws: [ERROR]: stammt vom CLI-v2-Wrapper; der Text danach ist die Meldung des Dienstes selbst. Eine Retry-Schleife, die jeden Exit-Status ungleich null als Drosselung behandelt, dreht sich bei beiden endlos — verzweige also über die Meldung, bevor du zurückrudern lässt.
Dieses verschachtelte JSON von Hand in einfache Anführungszeichen zu schreiben, ist die Quelle der meisten Fehler. Der DynamoDB Expression Builder baut typisierte Key-Maps zusammen und kopiert einen fertig ausführbaren Befehl heraus, womit zumindest das Quoting von der Verdächtigenliste verschwindet.
Um eine Menge Keys zurückzulesen und die Items ohne JSON-Umweg zu sehen, lade DynoTable herunter.
Verwandte Beispiele
- DynamoDB BatchGetItem in Node.js — derselbe Batch-Read mit AWS SDK v3.
- DynamoDB BatchGetItem in Python — derselbe Batch-Read mit boto3.
- DynamoDB GetItem mit der AWS CLI — der Einzel-Item-Read, den dieser Befehl bündelt.
- Batch-Operationen in DynamoDB — Limits, Teilfehler und wann sich Batching lohnt.
- "Too many items requested for the BatchGetItem call" — mehr als 100 Keys in einer Anfrage.
- "Provided list of item keys contains duplicates" — derselbe Key zweimal in einem Batch.
Referenzen
- BatchGetItem — Amazon DynamoDB API Reference
- batch-get-item — AWS CLI Command Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Zuletzt verifiziert am 2026-07-28 gegen die oben verlinkte offizielle AWS-Dokumentation.