DynamoDB — The expression can not be empty
TL;DR — Você passou um parâmetro de expressão (FilterExpression, KeyConditionExpression, ProjectionExpression, UpdateExpression ou ConditionExpression) como uma string vazia "". O DynamoDB exige que os parâmetros de expressão sejam ou uma expressão válida e não vazia ou totalmente ausentes — uma string vazia é inválida. Inclua o parâmetro apenas quando você de fato tem 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;O DynamoDB trata uma string vazia de forma diferente de um parâmetro omitido. Omitir FilterExpression significa "sem filtro"; passar FilterExpression: "" significa "aqui está um filtro" — e então não há nada para fazer parse, então a validação falha. O mesmo se aplica a todo parâmetro de expressão.
Por que acontece
- Params construídos condicionalmente sempre definidos — o código sempre anexa
FilterExpressionao objeto de requisição, e então o deixa""quando nenhum filtro foi escolhido. - Um helper/ORM/connector que emite uma string de expressão vazia em vez de remover a chave quando a lista de filtros está vazia.
- Concatenação de string que não produziu nada — juntar um array vazio de condições produz
"". - Conteúdo cortado — placeholders foram removidos, deixando uma expressão vazia.
Como corrigir
- Só defina o parâmetro quando ele não é vazio. Construa o objeto de params condicionalmente:
if (filter) params.FilterExpression = filter;— nunca atribua"". - Exclua chaves vazias antes da chamada — retire qualquer propriedade de expressão cujo valor seja uma string vazia/de espaços da requisição.
- Proteja seu builder — se a lista de condições está vazia, não anexe a expressão de forma alguma.
- Lembre-se de que são independentes —
ExpressionAttributeNames/Valuestambém devem ser omitidos (não{}referenciado por nada) quando não há expressão usando-os. - Para uma leitura de tabela inteira, um
ScansemFilterExpressionestá correto — omita o parâmetro em vez de passar um vazio.
Prototipando consultas antes de conectá-las ao código? Rode-as no app desktop DynoTable — ele só envia os parâmetros de expressão que você de fato preenche, então você não vai enviar um filtro de string vazia.
Erros relacionados
- Query key condition not supported — um
KeyConditionExpressionmalformado (não vazio). - Invalid UpdateExpression syntax — uma expressão de atualização não vazia mas malformada.
- Aprenda: Filtering strategies · Key condition expressions
Referências
- Using expressions in DynamoDB — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
- Scan — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Verificado pela última vez em 2026-07-13 contra a documentação oficial da AWS vinculada acima.