Number overflow. Attempting to store a number with magnitude larger than supported range
TL;DR — Seu número está fora dos limites do DynamoDB. O tipo N guarda até 38 dígitos de precisão com uma magnitude entre aproximadamente 1E-130 e 9.9999…E+125. Um valor além desse intervalo — ou um com mais de 38 dígitos significativos — é rejeitado com uma exceção. Armazene IDs grandes e valores de alta precisão como strings, não números.
O que significa
ValidationException: 1 validation error detected: Number overflow. Attempting to store a number with magnitude larger than supported rangeO tipo Number do DynamoDB é um decimal com um intervalo limitado e 38 dígitos significativos. Este ValidationException (HTTP 400) significa que o valor que você enviou excede essa magnitude — ou um runtime de linguagem transformou uma string numérica longa em um número de ponto flutuante que estourou o intervalo. Ele não é retentável como número; o valor precisa ser representado de forma diferente.
Por que isso acontece
- Um número genuinamente enorme — um valor maior que ~
9.9E+125(ou um valor positivo menor em magnitude que1E-130). - Uma string numérica longa convertida para float — por exemplo, um número de conta/referência de 120 dígitos passado por
Number()/parseFloat()vira algo como8.04e+126e estoura. Este é um gatilho frequente no mundo real. - Mais de 38 dígitos significativos — o tipo Number do DynamoDB guarda até 38 dígitos de precisão, e excedê-los resulta em uma exceção.
- Um valor computado (um produto, uma exponenciação) que cresceu além do intervalo.
Como corrigir
- Armazene-o como string (
S), não número. Identificadores grandes, números de conta ou hashes sobre os quais você nunca faz cálculos deveriam ser strings — isso desvia tanto do limite de magnitude quanto do teto de 38 dígitos de precisão. - Não converta strings tipo ID para números — mantenha uma referência de 100 dígitos como string de ponta a ponta. Convertê-la para float é o que produz o overflow.
- Mantenha atributos numéricos dentro do intervalo — o Number do DynamoDB suporta até 38 dígitos de precisão e magnitude até ~
9.9E+125. Projete valores para caber, ou divida/escale-os. - Para decimais de alta precisão, passe números como strings que você converte do seu tipo decimal (
Decimaldo Python, uma biblioteca de big-decimal) para que a precisão não se perca antes de chegar ao DynamoDB. - Preserve zeros à esquerda / exatidão armazenando como string — o tipo Number normaliza e não consegue manter zeros à esquerda de qualquer forma.
FAQ
Quais são os limites de número do DynamoDB? O tipo Number suporta até 38 dígitos de precisão e uma magnitude de cerca de 1E-130 a 9.9999999999999999999999999999999999999E+125 (positivo) e os negativos desses. Um valor fora desse intervalo levanta "Number overflow."
Como armazeno um número muito grande no DynamoDB? Armazene-o como um atributo de string (S) em vez de Number (N) se você não faz aritmética sobre ele — isso evita o teto de 38 dígitos de precisão e o limite de magnitude inteiramente. Para strings numéricas ordenáveis, preencha-as com zeros à esquerda para que a ordem lexical corresponda à ordem numérica.
Erros relacionados
- Float types are not supported. Use Decimal types instead — a contraparte de precisão do boto3.
- One or more parameter values were invalid — a família mais ampla de validação de valores.
- Aprenda: DynamoDB data types · Zero-padding sort keys
Referências
- 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 pela última vez em 2026-07-13 contra a documentação oficial da AWS vinculada acima.