Muitos itens solicitados para a chamada BatchWriteItem

TL;DR — BatchWriteItem aceita no máximo 25 ações put/delete por chamada (e ≤16 MB no total). Você enviou mais de 25, então DynamoDB rejeitou toda a solicitação. Divida seus itens em pedaços de 25 ou menos e emita um BatchWriteItem por pedaço.

O que significa

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

O serviço ecoa toda a sua solicitação serializada onde está o <your request> – cerca de 12.000 caracteres para um lote de 26 itens.

O BatchWriteItem agrupa ações PutRequest/DeleteRequest individuais em uma ou mais tabelas, mas uma única chamada tem um limite máximo de 25 ações e 16 MB de dados. Ultrapasse qualquer um dos limites e o DynamoDB rejeitará toda a solicitação antes de escrever qualquer coisa. É um HTTP 400 ValidationException, do lado do cliente e não pode ser tentado novamente até que você redimensione o lote.

Por que isso acontece

  • Escrever uma coleção grande em uma chamada — passando uma série de centenas de itens diretamente para o BatchWriteItem sem agrupamento.
  • Um chunk loop com o limite errado — lote por contagem, mas usando um limite acima de 25, ou um off-by-one que permite a passagem de 26.
  • Contando tabelas, não ações — o limite de 25 é o total de ações em todas as tabelas da solicitação, não por tabela.
  • Carga útil superdimensionada — mesmo com ≤25 ações, todo o lote será rejeitado se qualquer item único exceder 400 KB ou a solicitação total exceder 16 MB.

Como corrigir

  1. Divida em grupos de ≤25 ações e envie um BatchWriteItem por bloco.
  2. Handle UnprocessedItemsBatchWriteItem pode retornar itens que não processou (aceleração); tente novamente aqueles com espera exponencial. Isso é normal mesmo dentro de um lote válido de 25 itens.
  3. Mantenha cada lote com menos de 16 MB — com itens grandes, você pode precisar de menos de 25 por chamada.
  4. Use um auxiliar que faça buffer para você — os pedaços Table.batch_writer() do boto3 gravam e reenviam itens não processados automaticamente (o cliente aprimorado do Java SDK / v1 DynamoDBMapper também tenta novamente itens não processados). Os clientes de baixo nível e o cliente de documento JavaScript não dividem um lote muito grande.
  5. Dimensione cada bloco em bytes e também em contagem. Vinte e cinco itens grandes podem exceder 16 MB mesmo quando a contagem de ações é válida.

Meça no DynoTable

Antes de carregar os dados em massa, verifique os tamanhos dos itens no DynoTable - abra um item de amostra com ⌘K e confirme se cada um cabe abaixo de 400 KB. A calculadora de tamanho de item estima o tamanho da carga útil do lote para que você escolha um tamanho de bloco seguro antes que seu carregador seja executado.

Use o teste (⌘S) para testar uma gravação em lote pequeno em uma tabela de desenvolvimento antes de executar a importação completa. Alternar perfis com ⌘P; configure-os em Configurações → Perfis com Conexão de teste. Consulte Conectar ao AWS e Instalar.

Fontes

Erros relacionados

Referências

Última verificação em 13/07/2026 em relação à documentação oficial do AWS vinculada acima.

Trabalhe com o DynamoDB sem o Console

Um cliente desktop rápido para DynamoDB que roda o SQL de verdade que o DynamoDB não consegue — JOINs, GROUP BY, agregações — com edição visual e um agente de IA com suas próprias chaves do Bedrock.

Teste grátis de 30 dias, sem cartão de crédito — depois o plano Grátis sem limite de tempo.