Terlalu banyak item yang diminta untuk panggilan BatchWriteItem

TL;DR — BatchWriteItem menerima paling banyak 25 tindakan put/delete per panggilan (dan total ≤16 MB). Anda mengirim lebih dari 25, jadi DynamoDB menolak seluruh permintaan. Bagi item Anda menjadi beberapa bagian yang terdiri dari 25 atau kurang dan terbitkan satu BatchWriteItem per bagian.

Apa artinya

ValidationException: 1 validation error detected: Value '<your request>' at 'requestItems' failed to satisfy constraint: Map value must satisfy constraint: [Member must have length less than or equal to 25, Member must have length greater than or equal to 1]

# on DynamoDB Local the same call is rejected with a shorter sentence:
ValidationException: Too many items requested for the BatchWriteItem call

BatchWriteItem mengelompokkan tindakan PutRequest/DeleteRequest individual di satu atau beberapa tabel — namun satu panggilan dibatasi pada 25 tindakan dan 16 MB data. Melewati batas mana pun dan DynamoDB menolak seluruh permintaan sebelum menulis apa pun. Ini adalah HTTP 400 ValidationException, sisi klien, dan tidak dapat dicoba ulang sampai Anda mengubah ukuran batch.

Mengapa itu terjadi

  • Menulis koleksi besar dalam satu panggilan — meneruskan array yang berisi ratusan item langsung ke BatchWriteItem tanpa terpotong-potong.
  • Perulangan potongan dengan batas yang salah — mengelompokkan berdasarkan hitungan tetapi menggunakan batas di atas 25, atau off-by-one yang memungkinkan 26 lolos.
  • Menghitung tabel, bukan tindakan — batas 25 adalah total tindakan di semua tabel dalam permintaan, bukan per tabel.
  • Muatan berukuran besar — bahkan pada tindakan ≤25, seluruh batch ditolak jika ada item yang melebihi 400 KB atau total permintaan melebihi 16 MB.

Bagaimana cara memperbaikinya

  1. Pisahkan ke dalam grup yang berisi ≤25 tindakan dan kirim satu BatchWriteItem per bagian.
  2. Menangani UnprocessedItemsBatchWriteItem dapat mengembalikan item yang tidak diproses (pembatasan); coba lagi yang memiliki backoff eksponensial. Hal ini normal bahkan dalam kumpulan 25 item yang valid.
  3. Jaga setiap batch di bawah 16 MB — dengan item besar Anda mungkin memerlukan kurang dari 25 per panggilan.
  4. Gunakan pembantu yang melakukan buffering untuk Anda — potongan Table.batch_writer() boto3 menulis dan mengirim ulang item yang belum diproses secara otomatis (Klien yang Ditingkatkan dari Java SDK / v1 DynamoDBMapper juga mencoba ulang item yang belum diproses). Klien tingkat rendah dan klien dokumen JavaScript tidak membagi batch berukuran besar.
  5. Ukur setiap potongan berdasarkan byte serta jumlah. Dua puluh lima item besar dapat melebihi 16 MB meskipun jumlah tindakannya valid.

Ukur di DynoTable

Sebelum memuat data secara massal, periksa ukuran item di DynoTable — buka item sampel dengan ⌘K dan konfirmasikan setiap item yang ukurannya kurang dari 400 KB. Kalkulator ukuran item memperkirakan ukuran muatan batch sehingga Anda memilih ukuran potongan yang aman sebelum loader Anda berjalan.

Gunakan staging (⌘S) untuk menguji penulisan batch kecil terhadap tabel dev sebelum Anda menjalankan impor penuh. Ganti profil dengan ⌘P; konfigurasikan di bawah Pengaturan → Profil dengan Uji Koneksi. Lihat Menghubungkan ke AWS dan Instal.

Sumber

Kesalahan terkait

Referensi

Terakhir diverifikasi 2026-07-13 berdasarkan dokumentasi resmi AWS yang ditautkan di atas.

Bekerja dengan DynamoDB tanpa Console

Klien desktop DynamoDB yang cepat dan menjalankan SQL sungguhan yang tidak bisa dijalankan DynamoDB — JOINs, GROUP BY, agregasi — dengan editing visual dan agen AI pada kunci Bedrock milik Anda sendiri.

Uji coba gratis 30 hari, tanpa kartu kredit — lalu paket Free tanpa batas waktu.