Provided list of item keys contains duplicates (BatchGetItem)
TL;DR — Dein Keys-Array für eine Tabelle in BatchGetItem führt denselben Primärschlüssel mehr als einmal auf. DynamoDB verlangt, dass jeder Schlüssel in einem Batch eindeutig ist, und lehnt den gesamten Request ab — das Duplikat wird nicht stillschweigend verworfen. Entferne Duplikate aus der Schlüsselliste, bevor du sie abschickst.
Was es bedeutet
ValidationException: Provided list of item keys contains duplicatesBatchGetItem liest bis zu 100 Items über Tabellen hinweg. Innerhalb der Keys-Liste einer einzelnen Tabelle muss jeder Eintrag ein distinkter Primärschlüssel sein (Partitionsschlüssel, oder Partition + Sort Key bei Composite-Tabellen). Zwei Einträge, die auf denselben Key auflösen, lösen diese HTTP 400 ValidationException aus, und der ganze Aufruf scheitert — es werden keine Items zurückgegeben. Es ist so nicht wiederholbar.
Warum es passiert
- Derselbe Key erscheint zweimal in der Liste — oft, weil IDs aus mehreren Quellen gesammelt und nie zusammengeführt wurden.
- Eine generierte Key-Liste (z. B. das Abbilden einer Datensatzliste auf Keys), bei der die Quelle doppelte Zeilen hatte.
- Composite-Key-Verwirrung — zwei Einträge teilen den Partitionsschlüssel, aber du hast vergessen, dass sich der Sort Key unterscheidet; oder beide sind wirklich identisch.
- Groß-/Kleinschreibungs-/Typunterschiede, die ein echtes Duplikat verschleiern — zwei Keys, die auf denselben Wert marshallen.
- Loading-Pipelines (Glue, eigenes ETL), die Keys ohne Dedupe-Schritt blocken.
So behebst du es
- Dedupliziere vor dem Aufruf. Keye jeden Eintrag über einen stabilen String und behalte einen:
const seen = new Set(); const keys = raw.filter((k) => { const id = `${k.pk.S}#${k.sk?.S ?? ''}`; if (seen.has(id)) return false; seen.add(id); return true; }); - Denk daran, dass ein Batch ein Set ist, kein Bag — du brauchst pro Key immer nur einen Read; das Item kommt unabhängig davon einmal zurück.
- Blocke auf 100 Keys pro
BatchGetItemund behandleUnprocessedKeysin der Antwort (Throttling, keine Duplikate). - Sichere dein ETL/deinen Loader mit demselben Dedupe ab, damit das Problem stromaufwärts nicht wiederkehren kann.
Batches von Hand lesen und genau sehen wollen, welche Keys du sendest? Die DynoTable-Desktop-App listet Items nach Key, sodass versehentliche Duplikate in einem Arbeitsset leicht zu erkennen sind.
Weg in DynoTable
Bevor du batch-read keys from production, spot duplicates in DynoTable — öffne die Tabelle mit ⌘K, filter auf die IDs, die du holen willst, and bestätige, dass jeder Primärschlüssel einmal vorkommt. The item list shows partition and sort keys side by side so composite-key collisions are obvious.
Wenn du move the read into code, use the Query Builder um Single-Key-Reads zuerst zu prototypen, dann auf gechunktes BatchGetItem. Wechsle Profile mit ⌘P; konfiguriere sie unter Einstellungen → Profile mit Verbindung testen. Siehe Mit AWS verbinden und Installation.
Quellen
- BatchGetItem — Amazon DynamoDB API Reference (verifiziert 2026-07-13)
- Error handling with DynamoDB (verifiziert 2026-07-13)
Verwandte Fehler
- Provided list of item keys contains duplicates (BatchWriteItem) — dieselbe Regel auf dem Schreibpfad.
- ValidationException (overview)
- Code example: BatchGetItem in Node.js — ein korrekter geblockter Batch-Read zum Anpassen.
- Learn: Batch-Operationen
Referenzen
- BatchGetItem — Amazon DynamoDB API Reference
- BatchWriteItem — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.