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
- 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; }); - Ricorda che un lotto è un set, non una borsa: è necessaria solo una lettura per chiave; l'oggetto ritorna una volta a prescindere.
- Raggiungere 100 chiavi per "BatchGetItem" e gestire "UnprocessedKeys" nella risposta (limitazione, non duplicati).
- Proteggi il tuo ETL/loader con lo stesso dedupe in modo che il problema non possa ripresentarsi a monte.
- 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
- BatchGetItem — Riferimento Amazon DynamoDB API (verificato il 13-07-2026)
- Gestione degli errori con DynamoDB (verificato il 2026-07-13)
Errori correlati
- L'elenco fornito delle chiavi degli elementi contiene duplicati (BatchWriteItem) - la stessa regola sul percorso di scrittura.
- ValidationException (panoramica)
- Esempio di codice: BatchGetItem in Node.js: una lettura batch corretta in blocchi da adattare.
- Impara: Operazioni batch
Riferimenti
- BatchGetItem - Riferimento Amazon DynamoDB API
- BatchWriteItem — Riferimento Amazon DynamoDB API
- Gestione degli errori con DynamoDB - Guida per sviluppatori di Amazon DynamoDB
Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale del AWS collegata sopra.