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 rangeDynamoDB の Number 型は、範囲が制限された 38 個の有効桁数を持つ小数です。この ValidationException(HTTP 400)は、送った値がその桁数を超えている — または言語ランタイムが長い数値文字列を範囲をオーバーフローする浮動小数点数に変えた — ことを意味します。数値として リトライ不可 です。値は別様に表現する必要があります。
発生する理由
- 本当に巨大な数値 — 約
9.9E+125より大きい値(または桁数が1E-130より小さい正の値)。 - 長い数値文字列を float に解析 — 例: 120 桁のアカウント/参照番号を
Number()/parseFloat()に通すと8.04e+126のようなものになりオーバーフローする。これは頻繁な実世界のトリガーです。 - 38 個を超える有効桁数 — DynamoDB の Number 型は最大 38 桁の精度を持ち、それを超えると例外になります。
- 範囲を超えて成長した 計算された値(積、べき乗)。
修正方法
- 数値ではなく文字列(
S)として格納します。 演算をしない大きな識別子、アカウント番号、ハッシュは文字列にすべきです。これは桁数の制限と 38 桁の精度上限の両方を回避します。 - ID のような文字列を数値に解析しないでください — 100 桁の参照を端から端まで文字列として保持します。それを float に解析することがオーバーフローを生みます。
- 数値属性を範囲内に保ちます — DynamoDB の Number は最大 38 桁の精度と約
9.9E+125までの桁数をサポートします。収まるよう値を設計するか、分割/スケールします。 - 高精度の小数には、数値を小数型(Python の
Decimal、big-decimal ライブラリ)から変換した文字列として渡し、DynamoDB に届く前に精度が失われないようにします。 - 先頭のゼロ / 正確さを保つ には文字列として格納します — Number 型は正規化し、いずれにせよ先頭のゼロを保持できません。
よくある質問
DynamoDB の数値の制限は? Number 型は最大 38 桁の精度と、約 1E-130 から 9.9999999999999999999999999999999999999E+125(正)およびそれらの負をサポートします。その範囲外の値は "Number overflow" を発生させます。
非常に大きな数値を DynamoDB に格納するには? 演算をしないなら Number (N) ではなく文字列 (S) 属性として格納します。これは 38 桁の精度上限と桁数の制限を完全に回避します。ソート可能な数値文字列には、辞書順が数値順に一致するようゼロ埋めします。
関連するエラー
- Float types are not supported. Use Decimal types instead — boto3 の精度の対応物。
- One or more parameter values were invalid — より広範な値検証のファミリー。
- 学習: DynamoDB のデータ型 · ソートキーのゼロ埋め
参考資料
- 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
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。