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.
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.