Number overflow. Attempting to store a number with magnitude larger than supported range
TL;DR — Angka Anda di luar batas DynamoDB. Tipe N menyimpan hingga 38 digit presisi dengan magnitudo antara sekitar 1E-130 dan 9.9999…E+125. Nilai melewati rentang itu — atau yang dengan lebih dari 38 digit signifikan — ditolak dengan exception. Simpan ID besar dan nilai presisi tinggi sebagai string, bukan angka.
Apa artinya
ValidationException: 1 validation error detected: Number overflow. Attempting to store a number with magnitude larger than supported rangeTipe Number DynamoDB adalah desimal dengan rentang terbatas dan 38 digit signifikan. ValidationException ini (HTTP 400) berarti nilai yang Anda kirim melebihi magnitudo itu — atau runtime bahasa mengubah string numerik panjang menjadi angka floating-point yang meluap rentang. Ini tidak dapat dicoba ulang sebagai angka; nilai harus direpresentasikan secara berbeda.
Mengapa itu terjadi
- Angka yang benar-benar besar — nilai lebih besar dari ~
9.9E+125(atau nilai positif yang lebih kecil magnitudonya dari1E-130). - String numerik panjang di-parse ke float — mis. nomor akun/referensi 120-digit yang dijalankan melalui
Number()/parseFloat()menjadi sesuatu seperti8.04e+126dan meluap. Ini pemicu dunia nyata yang sering. - Lebih dari 38 digit signifikan — tipe Number DynamoDB menyimpan hingga 38 digit presisi, dan melampauinya menghasilkan exception.
- Nilai yang dihitung (produk, pemangkatan) yang tumbuh melewati rentang.
Bagaimana cara memperbaikinya
- Simpan sebagai string (
S), bukan angka. Identifier besar, nomor akun, atau hash yang tidak pernah Anda operasikan secara matematis harus menjadi string — ini menghindari batas magnitudo dan batas presisi 38-digit. - Jangan parse string mirip-ID ke angka — simpan referensi 100-digit sebagai string dari ujung ke ujung. Mem-parse-nya ke float adalah yang menghasilkan overflow.
- Jaga atribut numerik di dalam rentang — Number DynamoDB mendukung hingga 38 digit presisi dan magnitudo hingga ~
9.9E+125. Rancang nilai agar muat, atau pisahkan/skalakan. - Untuk desimal presisi tinggi, teruskan angka sebagai string yang Anda konversi dari tipe desimal Anda (
DecimalPython, library big-decimal) agar presisi tidak hilang sebelum mencapai DynamoDB. - Pertahankan leading zero / eksaktitas dengan menyimpan sebagai string — tipe Number menormalkan dan tidak dapat mempertahankan leading zero.
FAQ
Apa batas angka DynamoDB? Tipe Number mendukung hingga 38 digit presisi dan magnitudo dari sekitar 1E-130 hingga 9.9999999999999999999999999999999999999E+125 (positif) dan negatif dari itu. Nilai di luar rentang itu memunculkan "Number overflow."
Bagaimana cara menyimpan angka yang sangat besar di DynamoDB? Simpan sebagai atribut string (S) alih-alih Number (N) jika Anda tidak melakukan aritmetika padanya — ini menghindari batas presisi 38-digit dan batas magnitudo sepenuhnya. Untuk string numerik yang dapat diurutkan, zero-pad agar urutan leksikal cocok dengan urutan numerik.
Kesalahan terkait
- Float types are not supported. Use Decimal types instead — padanan presisi boto3.
- One or more parameter values were invalid — keluarga validasi-nilai yang lebih luas.
- Pelajari: DynamoDB data types · Zero-padding sort keys
Referensi
- 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
Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.