Number overflow: intento de almacenar un número con una magnitud mayor que el rango admitido

TL;DR — Tu número está fuera de los límites de DynamoDB. El tipo N admite hasta 38 dígitos de precisión con una magnitud entre aproximadamente 1E-130 y 9.9999…E+125. Un valor más allá de ese rango — o uno con más de 38 dígitos significativos — se rechaza con una excepción. Almacena los IDs grandes y los valores de alta precisión como cadenas, no como números.

Qué significa

ValidationException: 1 validation error detected: Number overflow. Attempting to store a number with magnitude larger than supported range

El tipo Number de DynamoDB es un decimal con un rango acotado y 38 dígitos significativos. Este ValidationException (HTTP 400) significa que el valor que enviaste supera esa magnitud — o que un runtime de lenguaje convirtió una cadena numérica larga en un número de coma flotante que desbordó el rango. No es reintentable como número; el valor tiene que representarse de otra forma.

Por qué ocurre

  • Un número genuinamente enorme — un valor mayor que ~9.9E+125 (o un valor positivo de magnitud menor que 1E-130).
  • Una cadena numérica larga convertida a un float — p. ej. un número de cuenta/referencia de 120 dígitos pasado por Number() / parseFloat() se convierte en algo como 8.04e+126 y desborda. Este es un desencadenante frecuente en el mundo real.
  • Más de 38 dígitos significativos — el tipo Number de DynamoDB admite hasta 38 dígitos de precisión, y superarlo produce una excepción.
  • Un valor calculado (un producto, una exponenciación) que creció más allá del rango.

Cómo solucionarlo

  1. Almacénalo como cadena (S), no como número. Los identificadores grandes, los números de cuenta o los hashes con los que nunca haces cálculos deberían ser cadenas — esto esquiva tanto el límite de magnitud como el tope de 38 dígitos de precisión.
  2. No conviertas cadenas de tipo ID a números — mantén una referencia de 100 dígitos como cadena de principio a fin. Convertirla a un float es lo que produce el desbordamiento.
  3. Mantén los atributos numéricos dentro del rango — DynamoDB Number admite hasta 38 dígitos de precisión y una magnitud de hasta ~9.9E+125. Diseña los valores para que quepan, o divídelos/escálalos.
  4. Para decimales de alta precisión, pasa los números como cadenas que conviertes desde tu tipo decimal (Decimal de Python, una biblioteca de big-decimal) para que no se pierda precisión antes de llegar a DynamoDB.
  5. Conserva los ceros a la izquierda / la exactitud almacenando como cadena — el tipo Number normaliza y de todos modos no puede conservar los ceros a la izquierda.

FAQ

¿Cuáles son los límites de número de DynamoDB? El tipo Number admite hasta 38 dígitos de precisión y una magnitud desde aproximadamente 1E-130 hasta 9.9999999999999999999999999999999999999E+125 (positivo) y los negativos de esos. Un valor fuera de ese rango produce "Number overflow."

¿Cómo almaceno un número muy grande en DynamoDB? Almacénalo como un atributo de cadena (S) en lugar de un Number (N) si no haces aritmética con él — esto evita por completo el tope de 38 dígitos de precisión y el límite de magnitud. Para cadenas numéricas ordenables, rellénalas con ceros a la izquierda para que el orden léxico coincida con el orden numérico.

Errores relacionados

Referencias

Verificado por última vez el 2026-07-13 contra 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.