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 duplicates

BatchGetItem 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

  1. 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;
    });
  2. 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.
  3. Blocke auf 100 Keys pro BatchGetItem und behandle UnprocessedKeys in der Antwort (Throttling, keine Duplikate).
  4. 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

Verwandte Fehler

Referenzen

Zuletzt verifiziert am 2026-07-13 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.