L'elenco fornito delle chiavi degli elementi contiene duplicati (BatchGetItem)

TL;DR — L'array BatchGetItem Keys per una tabella elenca la stessa chiave primaria più di una volta. DynamoDB richiede che ogni chiave in un batch sia univoca e rifiuta l'intera richiesta: non elimina silenziosamente il duplicato. Deduplica l'elenco delle chiavi prima di inviarlo.

Cosa significa

ValidationException: Provided list of item keys contains duplicates

"BatchGetItem" legge fino a 100 elementi nelle tabelle. All'interno dell'elenco "Chiavi" di una singola tabella, ciascuna voce deve essere una chiave primaria distinta (chiave di partizione o chiave di partizione + ordinamento per le tabelle composite). Due voci che risolvono la stessa chiave rilevano questa ValidationException HTTP 400 e l'intera chiamata fallisce: non viene restituito alcun elemento. Non è possibile riprovare così com'è.

Perché succede

  • La stessa chiave appare due volte nell'elenco, spesso perché gli ID sono stati raccolti da più fonti e mai uniti.
  • Un elenco di chiavi generato (ad esempio mappando un elenco di record in chiavi) in cui l'origine aveva righe duplicate.
  • Confusione di chiavi composite: due voci condividono la chiave di partizione ma hai dimenticato che la chiave di ordinamento è diversa; o entrambi sono veramente identici.
  • Differenze tra maiuscole e minuscole/tipo che mascherano un vero duplicato: due chiavi che eseguono il marshalling sullo stesso valore.
  • Caricamento di pipeline (Glue, ETL personalizzato) che raggruppano le chiavi senza una fase di deduplicazione.

Come risolverlo

  1. Deduplicare prima della chiamata. Contrassegnare ciascuna voce con una stringa stabile e conservarne una:
    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. Ricorda che un lotto è un set, non una borsa: è necessaria solo una lettura per chiave; l'oggetto ritorna una volta a prescindere.
  3. Raggiungere 100 chiavi per "BatchGetItem" e gestire "UnprocessedKeys" nella risposta (limitazione, non duplicati).
  4. Proteggi il tuo ETL/loader con lo stesso dedupe in modo che il problema non possa ripresentarsi a monte.
  5. Registra la lunghezza dell'elenco di chiavi prima di ogni batch. Quando vengono inseriti dei duplicati, l'errore non fornisce alcun indice: i tuoi registri devono mostrare quale fonte upstream ha ripetuto un ID.

Percorso in DynoTable

Prima di leggere in batch le chiavi dalla produzione, individua i duplicati in DynoTable: apri la tabella con ⌘K, filtra gli ID che intendi recuperare e verifica che ciascuna chiave primaria venga visualizzata una volta. L'elenco degli elementi mostra le chiavi di partizione e di ordinamento affiancate in modo che le collisioni tra chiavi composite siano evidenti.

Quando sposti la lettura nel codice, utilizza il Query Builder per prototipare prima le letture a chiave singola, quindi ridimensionarle in "BatchGetItem" in blocchi. Cambia profilo con ⌘P; configurarli in Impostazioni → Profili con Connessione di prova. Consulta Connetti a AWS e Installa.

Fonti

Errori correlati

Riferimenti

Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale del AWS collegata sopra.

Lavora con DynamoDB senza la Console

Un client desktop veloce per DynamoDB che esegue il vero SQL che DynamoDB non può — JOINs, GROUP BY, aggregazioni — con modifica visuale e un agente AI sulle tue chiavi Bedrock.

Prova gratuita di 30 giorni, senza carta di credito — poi il piano Free senza limiti di tempo.