Ferramenta gratuita

Construtor de Expressões do DynamoDB

Escolha uma operação, monte a requisição visualmente e copie uma expressão correta e segura para palavras reservadas — com seus ExpressionAttributeNames e Values — como AWS SDK v3, CLI, boto3 ou PartiQL.

Monte sua requisição
Código gerado
new QueryCommand({
  "TableName": "MyTable",
  "KeyConditionExpression": "#hashKey = :hashKeyValue AND begins_with(#rangeKey, :rangeKeyValue)",
  "ExpressionAttributeNames": {
    "#hashKey": "pk",
    "#rangeKey": "sk"
  },
  "ExpressionAttributeValues": {
    ":hashKeyValue": {
      "S": "USER#123"
    },
    ":rangeKeyValue": {
      "S": "ORDER#"
    }
  }
})

Por que escrever expressões do DynamoDB à mão é propenso a erros

Uma requisição do DynamoDB raramente falha na parte óbvia. Ela falha porque status é uma palavra reservada e precisa de um alias #, porque um id numérico foi enviado como string e não correspondeu a nada, ou porque um FilterExpression e um ConditionExpression reutilizaram o mesmo placeholder :v0. Cada um é um pequeno erro que produz uma requisição que roda, mas retorna as linhas erradas — o pior tipo de depurar.

Este construtor monta a requisição inteira a partir de um modelo tipado. Cada nome de atributo recebe um alias, cada valor carrega um tipo explícito do DynamoDB, e os placeholders de chave, filtro, condição e atualização vivem em namespaces separados, então colisões são impossíveis por construção. A saída é construída a partir das marcações de tipo, não adivinhada do seu texto — um número continua um número, uma string base64 continua binária.

As update expressions e as escritas condicionais recebem o mesmo tratamento: contadores atômicos, if_not_exists, list_append, REMOVE em um índice de lista, ADD/DELETE em sets e condições de optimistic locking se juntam em um UpdateExpression e um ConditionExpression corretos. A aba PartiQL é honesta — quando uma primitiva não tem forma em PartiQL, ela informa qual é, em vez de emitir uma instrução que se comporta mal silenciosamente.

Escolhendo primeiro entre uma Query e um Scan? Query vs Scan explica a diferença, e Exemplos de PartiQL aborda a sintaxe estilo SQL em profundidade.

Perguntas frequentes

O que é um ExpressionAttributeName, e por que os prefixos # e :?

As expressões do DynamoDB não conseguem referenciar diretamente um nome de atributo que seja uma palavra reservada (como name, status ou size), e um placeholder de valor mantém os dados reais fora da string da expressão. Por isso, cada nome de atributo recebe um alias com um placeholder # em ExpressionAttributeNames e cada valor um placeholder : em ExpressionAttributeValues. Este construtor gera esses mapas para você, então uma palavra reservada nunca quebra sua requisição.

Por que tenho que escolher um tipo (S, N, B…) para cada valor?

O DynamoDB é tipado no nível do atributo: o número 5 é { "N": "5" } e a string "5" é { "S": "5" } — valores diferentes que correspondem a itens diferentes. Um campo de texto não consegue distingui-los, então o construtor pede que você marque cada valor. A saída gerada para SDK, CLI, boto3 e PartiQL é construída a partir dessa marcação, nunca adivinhada do texto, então um id numérico continua um número e um blob base64 continua binário.

Ele consegue construir update expressions e escritas condicionais?

Sim. O Update cobre SET (incluindo if_not_exists, contadores atômicos +/- e list_append), REMOVE (incluindo um índice de lista como #a[2]), ADD (número ou set) e DELETE (membros de set) — combinados em um único UpdateExpression. As escritas condicionais adicionam um ConditionExpression a Update, Put ou Delete para optimistic locking (attribute_not_exists, uma verificação de versão e assim por diante). As condições de chave e as condições de valor usam namespaces de placeholder separados, então elas nunca colidem.

Por que o PartiQL às vezes é “não expressável”?

O PartiQL cobre a maioria das leituras e escritas, mas algumas primitivas do DynamoDB não têm forma em PartiQL: um INSERT condicional, as ações de atualização ADD/DELETE em sets e funções como size(), list_append e if_not_exists. Quando sua requisição usa uma delas, a aba PartiQL informa exatamente qual recurso não é expressável, em vez de emitir uma instrução que faria a coisa errada silenciosamente — use a saída SDK, CLI ou boto3 nesses casos.

Meus dados saem do navegador?

Não. O construtor roda inteiramente no lado do cliente — ele gera as expressões e os trechos de código no seu navegador e nada do que você digita é enviado a um servidor. O recurso “Copiar link” da URL serializa sua requisição no próprio link, para que você possa compartilhá-lo ou salvá-lo nos favoritos, mas isso fica nas suas mãos.

Trabalhe com o DynamoDB sem o Console

O DynoTable é um cliente desktop rápido para o DynamoDB — navegue pelas tabelas, execute consultas no estilo SQL e edite itens localmente.