DynamoDB — A expressão não pode ficar vazia

TL;DR — Você passou um parâmetro de expressão (FilterExpression, KeyConditionExpression, ProjectionExpression, UpdateExpression ou ConditionExpression) como uma string vazia "". DynamoDB exige que os parâmetros de expressão sejam uma expressão válida e não vazia ou totalmente ausentes - uma string vazia é inválida. Inclua o parâmetro apenas quando você realmente tiver uma expressão; caso contrário, omita a chave.

O que significa

ValidationException: Invalid FilterExpression: The expression can not be empty;
ValidationException: Invalid KeyConditionExpression: The expression can not be empty;

DynamoDB trata uma string vazia de maneira diferente de um parâmetro omitido. Omitir FilterExpression significa "sem filtro"; passar FilterExpression: "" significa "aqui está um filtro" - e não há nada para analisar, então a validação falha. O mesmo se aplica a todos os parâmetros de expressão.

Por que isso acontece

  • Parâmetros construídos condicionalmente sempre definidos — o código sempre anexa FilterExpression ao objeto de solicitação e o deixa "" quando nenhum filtro foi escolhido.
  • Um auxiliar/ORM/connector que emite uma string de expressão vazia em vez de descartar a chave quando a lista de filtros está vazia.
  • Concatenação de strings que não produziu nada — juntar uma matriz vazia de condições produz "".
  • Conteúdo cortado — os espaços reservados foram removidos, deixando uma expressão vazia.

Como corrigir

  1. Defina o parâmetro apenas quando ele não estiver vazio. Construa o objeto params condicionalmente: if (filter) params.FilterExpression = filter; — nunca atribua "".
  2. Exclua chaves vazias antes da chamada — retire qualquer propriedade de expressão cujo valor seja uma string vazia/whitespace da solicitação.
  3. Proteja seu construtor — se a lista de condições estiver vazia, não anexe a expressão.
  4. Lembre-se de que eles são independentesExpressionAttributeNames/Values também deve ser omitido (e não {} referenciado por nada) quando não houver expressão usando-os.
  5. Para uma leitura de tabela completa, um Scan sem FilterExpression é correto — omita o parâmetro em vez de passar um parâmetro vazio.

Execute no DynoTable

DynoTable envia apenas parâmetros de expressão que você realmente configura - uma lista de filtros vazia omite totalmente FilterExpression em vez de passar "". Abra uma tabela com ⌘K, adicione filtros no painel de consulta e copie a solicitação gerada quando pelo menos uma condição estiver presente.

Use o Query Builder para prototipar leituras antes de conectar parâmetros condicionais no código. O teste (⌘S) detecta erros de expressão vazia nas atualizações. Alternar perfis com ⌘P; Testar conexão em Configurações → Perfis confirma a tabela de destino. Consulte Conectar ao AWS e Instalar. Um parâmetro omitido e uma string vazia são diferentes — apenas o último aciona esse erro.

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.