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 help listet --starting-token, --max-items und --page-size; aws dynamodb batch-get-item help listet keinen der drei. UnprocessedKeys ist 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 UnprocessedKeys lässt sich ohne Umformung direkt wieder als --request-items einspeisen, und genau das macht eine while-Schleife in Bash erträglich. Warte zwischen den Versuchen; ein sofortiger neuer Lauf trifft dieselbe gedrosselte Partition.
  • ProjectionExpression und ConsistentRead gehören in das Objekt der jeweiligen Tabelle, neben "Keys". Sie auf die oberste Ebene von --request-items zu setzen, ist hier der häufigste Formfehler.
  • Halte die Map in einer Datei. --request-items file://keys.json umgeht 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 call

Das 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

Referenzen

Zuletzt verifiziert am 2026-07-28 gegen die oben verlinkte offizielle AWS-Dokumentation.

Mit DynamoDB ohne die Console arbeiten

Ein schneller DynamoDB-Desktop-Client, der das echte SQL ausführt, das DynamoDB nicht kann — JOINs, GROUP BY, Aggregationen — mit visueller Bearbeitung und einem KI-Agenten auf deinen eigenen Bedrock-Schlüsseln.

30 Tage kostenlos testen, keine Kreditkarte — danach der Kostenlos-Tarif ohne Zeitlimit.