Too many items requested for the BatchWriteItem call

TL;DR — BatchWriteItem çağrı başına en fazla 25 put/delete eylemi (ve toplam ≤16 MB) kabul eder. 25'ten fazla gönderdiniz, bu yüzden DynamoDB isteğin tamamını reddetti. Öğelerinizi 25 veya daha az parçalara bölün ve her parça için bir BatchWriteItem gönderin.

Ne anlama gelir

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

Hizmet, <your request> yerine serileştirilmiş isteğinizin tamamını geri yansıtır — 26 öğelik bir toplu istek için yaklaşık 12.000 karakter.

BatchWriteItem, bir veya daha fazla tabloda tek tek PutRequest/DeleteRequest eylemlerini gruplar — ancak tek bir çağrı 25 eylem ve 16 MB veriyle kesin olarak sınırlıdır. Her iki sınırı da aşın ve DynamoDB hiçbir şey yazmadan önce isteğin tamamını reddeder. Bu, istemci tarafında, toplu isteği yeniden boyutlandırana kadar yeniden denenebilir olmayan bir HTTP 400 ValidationException'dır.

Neden olur

  • Tek bir çağrıda büyük bir koleksiyon yazmak — yüzlerce öğeden oluşan bir diziyi parçalamadan doğrudan BatchWriteItem'a geçirmek.
  • Yanlış sınırlı bir parça döngüsü — sayıya göre gruplamak ama 25'in üstünde bir sınır kullanmak ya da 26'ya izin veren bir bir-eksik hatası.
  • Eylemleri değil tabloları saymak — 25 sınırı, tablo başına değil, istekteki tüm tablolar genelindeki toplam eylemdir.
  • Aşırı büyük yük — ≤25 eylemde bile, herhangi bir tek öğe 400 KB'yi ya da toplam istek 16 MB'yi aşarsa toplu isteğin tamamı reddedilir.

Nasıl düzeltilir

  1. ≤25 eylemlik gruplara bölün ve her parça için bir BatchWriteItem gönderin.
  2. UnprocessedItems'i ele alınBatchWriteItem, işlemediği öğeleri döndürebilir (kısıtlama); bunları üstel geri çekilmeyle yeniden deneyin. Bu, geçerli bir 25 öğelik toplu istekte bile normaldir.
  3. Her toplu isteği 16 MB'nin altında tutun — büyük öğelerle çağrı başına 25'ten az gerekebilir.
  4. Senin için tamponlayan bir yardımcı kullanın — boto3'ün Table.batch_writer()'ı yazmaları parçalar ve işlenmemiş öğeleri otomatik olarak yeniden gönderir (Java SDK'nın Enhanced Client'ı / v1 DynamoDBMapper de işlenmemiş öğeleri yeniden dener). Düşük seviyeli istemciler ve JavaScript belge istemcisi, aşırı büyük bir toplu isteği bölmez.

DynoTable’da ölç

Verileri toplu yüklemeden önce, DynoTable'daki öğe boyutlarını kontrol edin; ⌘K ile örnek bir öğe açın ve her birinin 400 KB'nin altına uyduğunu onaylayın. item sana calculator toplu yük boyutunu tahmin eder, böylece yükleyiciniz çalıştırılmadan önce güvenli bir parça boyutu seçersiniz.

Tam içe aktarmayı çalıştırmadan önce küçük bir toplu yazmayı bir geliştirme tablosuna karşı test etmek için aşamalandırmayı (⌘S) kullanın. Profilleri ⌘P ile değiştirin; bunları Ayarlar → Profiller altında Bağlantıyı Test Et ile yapılandırın. Bkz. Connect to AWS ve Install.

Kaynaklar

İlgili hatalar

Kaynaklar

En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Console olmadan DynamoDB ile çalış

DynamoDB’nin çalıştıramadığı gerçek SQL’i çalıştıran hızlı bir DynamoDB masaüstü istemcisi — JOINs, GROUP BY, toplamalar — görsel düzenleme ve kendi Bedrock anahtarların üzerinde bir yapay zekâ aracısıyla.

30 günlük ücretsiz deneme, kredi kartı yok — ardından süre sınırı olmayan Ücretsiz plan.