Supplied AttributeValue is empty, must contain exactly one of the supported datatypes

TL;DR — Um dos atributos no seu Item (ou chave) tem um AttributeValue com nenhum valor dentro dele — um set vazio, uma string/binário vazio em um atributo de chave, um campo null/undefined, ou um wrapper sem um membro S/N/BOOL/… O DynamoDB exige que todo AttributeValue contenha exatamente um tipo suportado. Remova o atributo vazio ou dê a ele um valor real.

O que significa

ValidationException: Supplied AttributeValue is empty, must contain exactly one of the supported datatypes

O DynamoDB rejeitou a requisição enquanto validava a forma de um item: um AttributeValue estava presente mas não carregava nada que o DynamoDB possa armazenar. Todo AttributeValue precisa conter exatamente um valor tipado (S, N, B, SS, NS, BS, M, L, NULL ou BOOL). É um HTTP 400, não retentável — o mesmo item falha novamente até você corrigir o atributo.

Isto é distinto de ExpressionAttributeValues contains invalid value: aquele é sobre um :placeholder em uma expressão; este é sobre um atributo no próprio corpo do item (PutItem, BatchWriteItem, TransactWriteItems).

Por que isso acontece

  • Um campo undefined/null no objeto que você está escrevendo — o marshaller emite um AttributeValue vazio em vez de pulá-lo ou tipá-lo como NULL.
  • Um Set vazioSS, NS ou BS precisa ter ao menos um membro. Um set vazio é inválido em todo lugar.
  • Uma string vazia em um atributo de chave — atributos de string que não são chave podem ser "", mas um atributo de chave de tabela ou índice não pode.
  • Um valor binário vazio em uma chave — mesma regra que strings: binário vazio é aceitável para atributos que não são chave (e dentro de sets, lists e maps), nunca para uma chave.
  • Um set vazio aninhado enterrado dentro de um Map ou List que você está persistindo — strings e valores binários vazios aninhados são permitidos; sets vazios aninhados não são.

Como corrigir

  1. Retire atributos vazios/undefined antes de escrever. Construa o Item apenas com os campos que de fato têm valores; descarte o resto em vez de enviar um wrapper vazio.
  2. Para o Document Client, habilite o tratamento de valores vazios. A opção de marshalling removeUndefinedValues: true do @aws-sdk/lib-dynamodb descarta campos undefined para que nunca alcancem o fio. (Strings vazias e valores binários para atributos que não são chave são permitidos pelo DynamoDB diretamente.)
  3. Nunca envie um Set vazio — omita o atributo inteiramente quando o set não tem membros, ou armazene um NULL.
  4. Dê valores reais a atributos de chave — uma chave de partição/ordenação (tabela ou índice) nunca pode ser uma string vazia ou binário vazio.
  5. Percorra Maps/Lists aninhados procurando sets vazios perdidos se o atributo problemático não é de nível superior.

FAQ

O que significa "Supplied AttributeValue is empty" no DynamoDB? Um atributo no seu item tem um AttributeValue que não contém nenhum valor armazenado — uma string ou binário vazio em um atributo de chave, um Set vazio, ou um campo null/undefined. Todo AttributeValue precisa conter exatamente um datatype suportado, então o DynamoDB rejeita a escrita.

Como impeço o DynamoDB de rejeitar valores vazios? Remova atributos vazios e indefinidos antes de escrever (ou use a opção removeUndefinedValues do Document Client). Nunca envie um Set vazio — omita o atributo ou armazene um NULL. Atributos de chave precisam sempre carregar um valor real e não vazio.

Erros relacionados

Referências

Verificado pela última vez em 2026-07-13 contra a documentação oficial da 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.