Demasiados elementos solicitados para la llamada BatchWriteItem
TL;DR: BatchWriteItem acepta como máximo 25 acciones de colocación/eliminación por llamada (y ≤16 MB en total). Enviaste más de 25, por lo que DynamoDB rechazó toda la solicitud. Divide tus artículos en trozos de 25 o menos y emite un BatchWriteItem por trozo.
Qué significa
ValidationException: 1 validation error detected: Value '<your request>' at 'requestItems' failed to satisfy constraint: Map value must satisfy constraint: [Member must have length less than or equal to 25, Member must have length greater than or equal to 1]
# on DynamoDB Local the same call is rejected with a shorter sentence:
ValidationException: Too many items requested for the BatchWriteItem callEl servicio devuelve toda tu petición serializada donde aparece <your request> — unos 12.000 caracteres para un lote de 26 items.
BatchWriteItem agrupa acciones individuales PutRequest/DeleteRequest en una o varias tablas — pero una sola llamada está limitada de forma estricta a 25 acciones y 16 MB de datos. Cruza cualquiera de los dos límites y DynamoDB rechaza la petición entera antes de escribir nada. Es un HTTP 400 ValidationException, del lado del cliente, y no reintentable hasta que redimensiones el lote.
Por qué ocurre
- Escribir una colección grande en una llamada — pasar un array de cientos de items directamente a
BatchWriteItemsin fragmentar. - Un bucle de fragmentación con el límite equivocado — agrupar por conteo pero usando un límite por encima de 25, o un error de uno-menos que deja pasar 26.
- Contar tablas, no acciones — el límite de 25 es el total de acciones de todas las tablas de la petición, no por tabla.
- Payload demasiado grande — incluso con ≤25 acciones se rechaza el lote entero si algún item supera los 400 KB o el total de la petición supera los 16 MB.
Cómo solucionarlo
- Fragmenta en grupos de ≤25 acciones y envía un
BatchWriteItempor bloque. - Gestiona
UnprocessedItems—BatchWriteItempuede devolver items que no procesó (throttling); reintenta esos con backoff exponencial. Esto es normal incluso dentro de un lote válido de 25 items. - Mantén cada lote por debajo de 16 MB — con items grandes puede que necesites menos de 25 por llamada.
- Usa un helper que haga el buffer por ti — el
Table.batch_writer()de boto3 fragmenta las escrituras y reenvía los items no procesados automáticamente (el Enhanced Client / DynamoDBMapper v1 del SDK de Java también reintentan los items no procesados). Los clientes de bajo nivel y el document client de JavaScript no dividen un lote demasiado grande. - Dimensiona cada bloque por bytes además de por conteo. Veinticinco items grandes pueden superar los 16 MB aunque el número de acciones sea válido.
Mídelo en DynoTable
Antes de cargar datos en masa, revisa los tamaños de item en DynoTable — abre un item de muestra con ⌘K y confirma que cada uno cabe por debajo de 400 KB. La calculadora de tamaño de item estima el tamaño del payload del lote para que elijas un tamaño de bloque seguro antes de ejecutar tu cargador.
Usa el área de preparación (⌘S) para probar una escritura por lotes pequeña contra una tabla de desarrollo antes de lanzar la importación completa. Cambia de perfil con ⌘P; configúralos en Settings → Profiles con Test Connection. Consulta Conectar con AWS e Instalación.
Fuentes
- BatchWriteItem — Amazon DynamoDB API Reference (verificado 2026-07-13)
- Amazon DynamoDB — AWS SDK for Python (Boto3) guide (verificado 2026-07-13)
Errores relacionados
- Too many items requested for the BatchGetItem call — el límite del lado de lectura (100 items).
- Provided list of item keys contains duplicates — la misma clave dos veces en un mismo BatchWriteItem.
- ProvisionedThroughputExceededException — throttling que aparece como UnprocessedItems.
- Ejemplo de código: BatchWriteItem en Node.js · en Python (boto3) — escrituras fragmentadas con reintento de UnprocessedItems.
- Aprende: Operaciones por lotes de DynamoDB
Referencias
- BatchWriteItem — Amazon DynamoDB API Reference
- BatchGetItem — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- Amazon DynamoDB — AWS SDK for Python (Boto3) guide
Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.