El AttributeValue suministrado está vacío, debe contener exactamente uno de los tipos de datos soportados

TL;DR — Uno de los atributos de tu Item (o clave) tiene un AttributeValue sin ningún valor dentro — un conjunto vacío, una cadena/binario vacío en un atributo de clave, un campo null/undefined, o un envoltorio sin miembro S/N/BOOL/… DynamoDB requiere que cada AttributeValue contenga exactamente un tipo soportado. Elimina el atributo vacío o dale un valor real.

Qué significa

ValidationException: Supplied AttributeValue is empty, must contain exactly one of the supported datatypes

DynamoDB rechazó la petición al validar la forma de un Item: un AttributeValue estaba presente pero no llevaba nada que DynamoDB pueda almacenar. Cada AttributeValue debe contener exactamente un valor tipado (S, N, B, SS, NS, BS, M, L, NULL o BOOL). Es un HTTP 400, no reintentable — el mismo Item vuelve a fallar hasta que arregles el atributo.

Esto es distinto de ExpressionAttributeValues contains invalid value: ese trata de un :placeholder en una expresión; este trata de un atributo en el cuerpo del Item en sí (PutItem, BatchWriteItem, TransactWriteItems).

Por qué ocurre

  • Un campo undefined/null en el objeto que estás escribiendo — el marshaller emite un AttributeValue vacío en lugar de omitirlo o tiparlo como NULL.
  • Un conjunto vacíoSS, NS o BS debe tener al menos un miembro. Un conjunto vacío es inválido en todas partes.
  • Una cadena vacía en un atributo de clave — los atributos de cadena que no son de clave pueden ser "", pero un atributo de clave de tabla o índice no.
  • Un valor binario vacío en una clave — misma regla que las cadenas: el binario vacío está bien para atributos que no son de clave (y dentro de conjuntos, listas y mapas), nunca para una clave.
  • Un conjunto vacío anidado enterrado dentro de un Map o List que estás persistiendo — las cadenas y valores binarios vacíos anidados están permitidos; los conjuntos vacíos anidados no.

Cómo solucionarlo

  1. Elimina los atributos vacíos/undefined antes de escribir. Construye el Item solo a partir de los campos que realmente tienen valores; descarta el resto en lugar de enviar un envoltorio vacío.
  2. Para el Document Client, activa el manejo de valores vacíos. La opción de marshalling removeUndefinedValues: true de @aws-sdk/lib-dynamodb descarta los campos undefined para que nunca lleguen a la transferencia. (Las cadenas vacías y los valores binarios para atributos que no son de clave los permite DynamoDB directamente.)
  3. Nunca envíes un conjunto vacío — omite el atributo por completo cuando el conjunto no tenga miembros, o almacena un NULL.
  4. Da valores reales a los atributos de clave — una clave de partición/ordenación (de tabla o índice) nunca puede ser una cadena vacía ni un binario vacío.
  5. Recorre los Maps/Lists anidados en busca de conjuntos vacíos perdidos si el atributo problemático no es de primer nivel.

FAQ

¿Qué significa "Supplied AttributeValue is empty" en DynamoDB? Un atributo de tu Item tiene un AttributeValue que no contiene ningún valor almacenado — una cadena o binario vacío en un atributo de clave, un conjunto vacío, o un campo null/undefined. Cada AttributeValue debe contener exactamente un tipo de dato soportado, así que DynamoDB rechaza la escritura.

¿Cómo evito que DynamoDB rechace los valores vacíos? Elimina los atributos vacíos y undefined antes de escribir (o usa la opción removeUndefinedValues del Document Client). Nunca envíes un conjunto vacío — omite el atributo o almacena un NULL. Los atributos de clave deben llevar siempre un valor real y no vacío.

Errores relacionados

Referencias

Última verificación el 2026-07-13 con la documentación oficial de AWS enlazada arriba.

Trabaja con DynamoDB sin la Consola

Un cliente de escritorio rápido para DynamoDB que ejecuta el SQL real que DynamoDB no puede — JOINs, GROUP BY, agregaciones — con edición visual y un agente de IA con tus propias claves de Bedrock.

Prueba gratuita de 30 días, sin tarjeta — después, el plan Free sin límite de tiempo.