"Too Many Items": troppi elementi richiesti per la chiamata BatchGetItem

TL;DR — BatchGetItem recupera al massimo 100 elementi per chiamata (e ≤16 MB di dati). Hai richiesto più di 100 chiavi, quindi DynamoDB ha rifiutato la richiesta. Dividi le tue chiavi in blocchi di 100 o meno ed emetti un "BatchGetItem" per blocco.

Cosa significa

ValidationException: 1 validation error detected: Value at 'RequestItems.<table-name>.member.Keys' failed to satisfy constraint: Member must have length less than or equal to 100

# on DynamoDB Local the same call is rejected with a shorter sentence:
ValidationException: Too many items requested for the BatchGetItem call

"BatchGetItem" recupera gli elementi in base alla chiave primaria su una o più tabelle, ma una singola chiamata ha un limite di 100 chiavi e 16 MB di dati restituiti. Richiedi più di 100 e DynamoDB rifiuta l'intera chiamata. Anche entro questo limite, una risposta può restituire meno elementi di quelli richiesti (il tetto di 16 MB), riportando il resto in "UnprocessedKeys". Il caso di superamento del limite è una "ValidationException" HTTP 400, non riproducibile finché non viene ridimensionata.

Perché succede

  • Richiesta di un set di chiavi di grandi dimensioni in una chiamata: passaggio di centinaia di chiavi direttamente in BatchGetItem.
  • Un blocco limitato sopra 100: raggruppamento in batch per conteggio ma utilizzando il fratello del limite BatchWrite di 25 elementi in modo errato o un off-by-one che lascia passare 101.
  • Conteggio delle tabelle, non delle chiavi: il limite di 100 corrisponde al totale delle chiavi su tutte le tabelle nella richiesta.
  • Non eseguire il paging di UnprocessedKeys: presupponendo che una chiamata restituisca tutto, quindi non si esegue mai il blocco.

Come risolverlo

  1. Raggruppa le chiavi in gruppi di ≤100 e invia un BatchGetItem per blocco.
  2. Gestisci UnprocessedKeys: riprova qualsiasi chiave restituita con backoff esponenziale; ciò accade anche all'interno di un batch valido da 100 chiavi quando viene raggiunto il limite di 16 MB.
  3. Mantieni le risposte sotto i 16 MB: con elementi di grandi dimensioni, richiedi meno di 100 per chiamata.
  4. Scopri cosa fa per te il tuo SDK: i client di basso livello e il client di documenti JavaScript non dividono un elenco di chiavi di grandi dimensioni; devi arrivare a 100 tu stesso. Alcuni client di livello superiore (Enhanced Client di Java SDK e DynamoDBMapper v1) riprovano almeno automaticamente gli elementi non elaborati.
  5. Deduplicazione delle chiavi prima della suddivisione in blocchi. Le chiavi duplicate in un batch falliscono separatamente: prima la deduplicazione, quindi la suddivisione in blocchi.

Riproducilo

Un BatchGetItem che richiede 101 chiavi, una oltre il limite:

const Keys = Array.from({length: 101}, (_, i) => ({pk: {S: `K#${i}`}, sk: {S: 'META'}}));
await client.send(new BatchGetItemCommand({RequestItems: {orders: {Keys}}}));

Produzione reale:

ValidationException: Too many items requested for the BatchGetItem call
HTTP 400

Questo fallisce velocemente nella forma della richiesta: non avviene alcuna lettura parziale e nulla finisce in "UnprocessedKeys". Questa è la differenza tra il superamento del limite di 100 tasti e il superamento del limite di risposta di 16 MB, che restituisce risultati parziali.

Da DynoTable

Leggi in batch meno di 100 chiavi alla volta in DynoTable durante il debug: apri la tabella con ⌘K, filtra in base al set di chiavi e verifica che gli elementi esistano prima di collegare BatchGetItem in blocchi nel codice. Il calcolatore della dimensione dell'oggetto aiuta a scegliere una dimensione sicura del blocco quando gli oggetti sono grandi.

Utilizzare il Query Builder per prototipare prima le letture a chiave singola. Cambia profilo con ⌘P; Verifica connessione in Impostazioni → Profili. Consulta Connetti a AWS e Installa.

Fonti

Errori correlati

Riferimenti

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

Riprodotto il 26-07-2026 rispetto a DynamoDB Local 2.x con AWS SDK per JavaScript v3.1095.0: l'output sopra è letterale.

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.