"Too Many Items": demasiados elementos solicitados para la llamada BatchGetItem
TL;DR: BatchGetItem recupera como máximo 100 elementos por llamada (y ≤16 MB de datos). Solicitó más de 100 claves, por lo que DynamoDB rechazó la solicitud. Divida sus claves en fragmentos de 100 o menos y emita un BatchGetItem por fragmento.
Qué 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 callBatchGetItem recupera items por clave primaria en una o varias tablas, pero una sola llamada está limitada a 100 claves y 16 MB de datos devueltos. Solicita más de 100 y DynamoDB rechaza la llamada entera. Incluso dentro del límite, una respuesta puede devolver menos items de los pedidos (el techo de 16 MB), reportando el resto en UnprocessedKeys. El caso de superar el límite es un HTTP 400 ValidationException, no reintentable hasta que se redimensione.
Por qué ocurre
- Solicitar un conjunto grande de claves en una llamada — pasar cientos de claves directamente a
BatchGetItem. - Un límite de bloque por encima de 100 — agrupar por conteo pero usando incorrectamente el hermano del límite de 25 items de BatchWrite, o un error de uno-menos que deja pasar 101.
- Contar tablas, no claves — el límite de 100 es el total de claves de todas las tablas de la petición.
- No paginar
UnprocessedKeys— asumir que una sola llamada lo devuelve todo, así que nunca fragmentas.
Cómo solucionarlo
- Fragmenta las claves en grupos de ≤100 y envía un
BatchGetItempor bloque. - Gestiona
UnprocessedKeys— reintenta cualquier clave devuelta con backoff exponencial; esto ocurre incluso dentro de un bloque válido de 100 claves cuando se alcanza el tope de 16 MB. - Mantén las respuestas por debajo de 16 MB — con items grandes, solicita menos de 100 por llamada.
- Sabe qué hace tu SDK por ti — los clientes de bajo nivel y el document client de JavaScript no dividen una lista de claves demasiado grande; tienes que fragmentar a 100 tú mismo. Algunos clientes de más alto nivel (el Enhanced Client del SDK de Java y el DynamoDBMapper v1) al menos reintentan los items no procesados automáticamente.
- Elimina las claves duplicadas antes de fragmentar. Las claves duplicadas en un mismo bloque fallan por separado — deduplica primero y luego fragmenta.
Reproducirlo
Un BatchGetItem que pide 101 claves, una más que el tope:
const Keys = Array.from({length: 101}, (_, i) => ({pk: {S: `K#${i}`}, sk: {S: 'META'}}));
await client.send(new BatchGetItemCommand({RequestItems: {orders: {Keys}}}));Salida real:
ValidationException: Too many items requested for the BatchGetItem call
HTTP 400Este falla rápido por la forma de la petición — no ocurre ninguna lectura parcial y no queda nada en UnprocessedKeys. Esa es la diferencia entre superar el límite de 100 claves y superar el límite de 16 MB de respuesta, que sí devuelve resultados parciales.
Desde DynoTable
Lee por lotes menos de 100 claves a la vez en DynoTable mientras depuras — abre la tabla con ⌘K, filtra a tu conjunto de claves y confirma que los items existen antes de cablear un BatchGetItem fragmentado en código. La calculadora de tamaño de item ayuda a elegir un tamaño de bloque seguro cuando los items son grandes.
Usa el Query Builder para prototipar primero lecturas de una sola clave. Cambia de perfil con ⌘P; Test Connection en Settings → Profiles. Consulta Conectar con AWS e Instalación.
Fuentes
- BatchGetItem — Amazon DynamoDB API Reference (verificado 2026-07-13)
- Quotas in Amazon DynamoDB (verificado 2026-07-13)
Errores relacionados
- Too many items requested for the BatchWriteItem call — el límite del lado de escritura (25 items).
- Provided list of item keys contains duplicates — la misma clave dos veces en un mismo BatchGetItem.
- ProvisionedThroughputExceededException — throttling que aparece como UnprocessedKeys.
- Ejemplo de código: BatchGetItem en Node.js · en Python (boto3) — lecturas fragmentadas con reintento de UnprocessedKeys.
- Aprende: Operaciones por lotes de DynamoDB
Referencias
- BatchGetItem — Amazon DynamoDB API Reference
- BatchWriteItem — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- Quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide
Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.
Reproducido el 2026-07-26 contra DynamoDB Local 2.x con AWS SDK for JavaScript v3.1095.0 — la salida de arriba es literal.