Number overflow. Attempting to store a number with magnitude larger than supported range

TL;DR — 数値が DynamoDB の制限外です。N 型は 最大 38 桁の精度 を持ち、桁数はおよそ 1E-130 から 9.9999…E+125 の間です。その範囲を超える値 — または 38 個を超える有効桁数を持つもの — は例外で拒否されます。大きな ID や高精度の値は、数値ではなく 文字列 として格納してください。

意味

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

DynamoDB の Number 型は、範囲が制限された 38 個の有効桁数を持つ小数です。この ValidationException(HTTP 400)は、送った値がその桁数を超えている — または言語ランタイムが長い数値文字列を範囲をオーバーフローする浮動小数点数に変えた — ことを意味します。数値として リトライ不可 です。値は別様に表現する必要があります。

発生する理由

  • 本当に巨大な数値 — 約 9.9E+125 より大きい値(または桁数が 1E-130 より小さい正の値)。
  • 長い数値文字列を float に解析 — 例: 120 桁のアカウント/参照番号を Number() / parseFloat() に通すと 8.04e+126 のようなものになりオーバーフローする。これは頻繁な実世界のトリガーです。
  • 38 個を超える有効桁数 — DynamoDB の Number 型は最大 38 桁の精度を持ち、それを超えると例外になります。
  • 範囲を超えて成長した 計算された値(積、べき乗)。

修正方法

  1. 数値ではなく文字列(S)として格納します。 演算をしない大きな識別子、アカウント番号、ハッシュは文字列にすべきです。これは桁数の制限と 38 桁の精度上限の両方を回避します。
  2. ID のような文字列を数値に解析しないでください — 100 桁の参照を端から端まで文字列として保持します。それを float に解析することがオーバーフローを生みます。
  3. 数値属性を範囲内に保ちます — DynamoDB の Number は最大 38 桁の精度と約 9.9E+125 までの桁数をサポートします。収まるよう値を設計するか、分割/スケールします。
  4. 高精度の小数には、数値を小数型(Python の Decimal、big-decimal ライブラリ)から変換した文字列として渡し、DynamoDB に届く前に精度が失われないようにします。
  5. 先頭のゼロ / 正確さを保つ には文字列として格納します — Number 型は正規化し、いずれにせよ先頭のゼロを保持できません。

よくある質問

DynamoDB の数値の制限は? Number 型は最大 38 桁の精度と、約 1E-130 から 9.9999999999999999999999999999999999999E+125(正)およびそれらの負をサポートします。その範囲外の値は "Number overflow" を発生させます。

非常に大きな数値を DynamoDB に格納するには? 演算をしないなら Number (N) ではなく文字列 (S) 属性として格納します。これは 38 桁の精度上限と桁数の制限を完全に回避します。ソート可能な数値文字列には、辞書順が数値順に一致するようゼロ埋めします。

関連するエラー

参考資料

最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。

Console なしで DynamoDB を扱う

DynamoDB では実行できない本物の SQL(JOINs、GROUP BY、集計)を実行する高速な DynamoDB デスクトップクライアント。ビジュアル編集と、あなた自身の Bedrock キーで動く AI エージェントを備えています。

30日間無料トライアル、クレジットカード不要 — その後は期限のない Free プラン。