Valor fornecido em ExpressionAttributeNames não utilizado em expressões
TL;DR — Você declarou um espaço reservado para nome em ExpressionAttributeNames (por exemplo, #status) ao qual nenhuma expressão faz referência. O DynamoDB exige que cada alias declarado seja usado em um KeyConditionExpression, FilterExpression, UpdateExpression, ConditionExpression ou ProjectionExpression. Remova o alias não utilizado ou corrija a expressão que deveria fazer referência a ele.
O que significa
ValidationException: 1 validation error detected: Value provided in ExpressionAttributeNames unused in
expressions: keys: {#status}
# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: 1 validation error detected: Value provided in ExpressionAttributeNames unused in expressions: keys: {#status}ExpressionAttributeNamesé um mapa de substituição para aliases de nomes de atributos (necessário para palavras reservadas ou nomes com caracteres especiais). O DynamoDB impõe um contrato bidirecional estrito: todo alias que você usa em uma expressão deve ser declarado, **e** todo alias que você declara deve ser usado. Uma entrada restante e não referenciada aciona este HTTP 400ValidationException`. É do lado do cliente e não pode ser repetido até que o mapa corresponda às expressões.
Por que isso acontece
- Um alias obsoleto deixado após a edição de uma expressão — você removeu
#status = :sda expressão, mas esqueceu de excluir#statusdo mapa de nomes. - Um mapa gerado que declara demais — uma camada de mapeamento emitia aliases para cada atributo, mesmo aqueles que a expressão final não toca.
- O alias está no mapa de valores, não nos nomes — você quis dizer
:status(um valor), mas declarou#status(um nome). - Incompatibilidade de digitação — a expressão usa
#statenquanto o mapa declara#status, então#statusnão é tecnicamente utilizado.
Como corrigir
- Exclua o alias não utilizado os nomes das mensagens do
ExpressionAttributeNames. - Mantenha o mapa em sincronia com as expressões — declare um
#namesomente quando uma expressão realmente fizer referência a ele. - Verifique se há uma confusão de nome x valor - os aliases
#estão ativos noExpressionAttributeNames, os espaços reservados:noExpressionAttributeValues. - Gere novamente a solicitação para que nomes, valores e texto de expressão sejam criados juntos, em vez de montados manualmente.
Inspecione no DynoTable
DynoTable cria aliases para nomes de atributos reservados nos editores de atualização e filtro — cada #placeholder na saída é referenciado na expressão. Abra uma tabela com ⌘K, edite um item e copie o mapa ExpressionAttributeNames gerado.
Faça uma verificação cruzada de solicitações de SDK com falha no verificador de palavras reservadas — ele imprime o mapa de alias para nomes que precisam de prefixos #. Alternar perfis com ⌘P; consulte Conectar ao AWS e Instalar.
Fontes
- Nomes de atributos de expressão (aliases) em DynamoDB (verificado em 13/07/2026)
- Palavras reservadas em DynamoDB (verificado em 13/07/2026)
Reproduza
Uma entrada ExpressionAttributeNames à qual nenhuma expressão faz referência:
await client.send(
new UpdateItemCommand({
TableName: 'orders',
Key: {pk: {S: 'ORDER#1'}, sk: {S: 'META'}},
UpdateExpression: 'SET stat = :v', // note: 'stat', not '#unused'
ExpressionAttributeNames: {'#unused': 'status'},
ExpressionAttributeValues: {':v': {S: 'shipped'}}
})
);A mensagem nomeia a chave ofensiva, o que torna este um dos poucos erros de validação do DynamoDB nos quais você pode agir sem ler mais nada. Geralmente aparece depois que uma edição remove um espaço reservado da expressão, mas deixa sua declaração para trás.
Erros relacionados
- Valor fornecido em ExpressionAttributeValues não utilizados em expressões — a mesma regra para espaços reservados
:value. - A expressão fornecida refere-se a um atributo que não existe no item — a expressão lê um atributo do item que não existe.
- Nome do atributo é uma palavra-chave reservada — por que você precisava de um alias
#em primeiro lugar. - Aprenda: Nomes e valores de expressões
Referências
- Nomes de atributos de expressão (aliases) no DynamoDB — Guia do desenvolvedor do Amazon DynamoDB
- Consulta — Referência Amazon DynamoDB API
- Palavras reservadas no DynamoDB — Guia do desenvolvedor do Amazon DynamoDB
Última verificação em 13/07/2026 em relação à documentação oficial do AWS vinculada acima.
Reproduzido em 26/07/2026 em DynamoDB Local 2.x com AWS SDK para JavaScript v3.1095.0 - a saída acima é literal.
ValidationException: 1 validation error detected: Value provided in ExpressionAttributeNames unused in expressions: keys: {#unused}
HTTP 400