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 rangeEl 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 que1E-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 como8.04e+126y 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
- 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. - 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.
- 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. - Para decimales de alta precisión, pasa los números como cadenas que conviertes desde tu tipo decimal (
Decimalde Python, una biblioteca de big-decimal) para que no se pierda precisión antes de llegar a DynamoDB. - 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
- Float types are not supported. Use Decimal types instead — la contraparte de precisión en boto3.
- One or more parameter values were invalid — la familia más amplia de validación de valores.
- Aprende: DynamoDB data types · Zero-padding sort keys
Referencias
- Supported data types and naming rules in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- AttributeValue — Amazon DynamoDB API Reference
Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.