Herramienta gratuita

Generador de expresiones de DynamoDB

Elige una operación, construye la solicitud visualmente y copia una expresión correcta y segura ante palabras reservadas —con sus ExpressionAttributeNames y Values— como AWS SDK v3, CLI, boto3 o PartiQL.

Construye tu solicitud
Código generado
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 qué escribir a mano las expresiones de DynamoDB es propenso a errores

Una solicitud de DynamoDB rara vez falla en la parte obvia. Falla porque status es una palabra reservada y necesita un alias #-, porque un id numérico se envió como una cadena y no coincidió con nada, o porque una FilterExpression y una ConditionExpression reutilizaron el mismo marcador :v0. Cada uno es un pequeño error que produce una solicitud que se ejecuta pero devuelve las filas equivocadas — el peor tipo de error para depurar.

Este generador ensambla la solicitud completa a partir de un modelo tipado. Cada nombre de atributo se referencia con un alias, cada valor lleva un tipo de DynamoDB explícito, y los marcadores de clave, filtro, condición y actualización viven en espacios de nombres separados, así que las colisiones son imposibles por construcción. La salida se construye a partir de las etiquetas de tipo, no se adivina de tu texto: un número sigue siendo un número, una cadena base64 sigue siendo binaria.

Las expresiones de actualización y las escrituras condicionales reciben el mismo tratamiento: los contadores atómicos, if_not_exists, list_append, REMOVE sobre un índice de lista, ADD/DELETE sobre sets y las condiciones de bloqueo optimista se ensamblan todos en una UpdateExpression y una ConditionExpression correctas. La pestaña de PartiQL es honesta: cuando una primitiva no tiene forma en PartiQL, te dice cuál en lugar de emitir una sentencia que se comporta mal en silencio.

¿Eliges primero entre una Query y un Scan? Query frente a Scan explica la diferencia, y Ejemplos de PartiQL cubre en profundidad la sintaxis tipo SQL.

Preguntas frecuentes

¿Qué es un ExpressionAttributeName y por qué los prefijos # y :?

Las expresiones de DynamoDB no pueden referenciar directamente un nombre de atributo que sea una palabra reservada (como name, status o size), y un marcador de posición de valor mantiene los datos reales fuera de la cadena de la expresión. Por eso cada nombre de atributo se referencia con un marcador #- en ExpressionAttributeNames y cada valor con un marcador :- en ExpressionAttributeValues. Este generador crea esos mapas por ti, para que una palabra reservada nunca rompa tu solicitud.

¿Por qué tengo que elegir un tipo (S, N, B…) para cada valor?

DynamoDB es tipado a nivel de atributo: el número 5 es { "N": "5" } y la cadena "5" es { "S": "5" } — valores distintos que coinciden con Items distintos. Un campo de texto no puede distinguirlos, así que el generador te pide que etiquetes cada valor. La salida emitida en SDK, CLI, boto3 y PartiQL se construye a partir de esa etiqueta, nunca se adivina del texto, así que un id numérico sigue siendo un número y un blob base64 sigue siendo binario.

¿Puede generar expresiones de actualización y escrituras condicionales?

Sí. Update cubre SET (incluyendo if_not_exists, contadores atómicos +/- y list_append), REMOVE (incluyendo un índice de lista como #a[2]), ADD (número o set) y DELETE (miembros de un set), combinados en una sola UpdateExpression. Las escrituras condicionales añaden una ConditionExpression a Update, Put o Delete para el bloqueo optimista (attribute_not_exists, una comprobación de versión, etc.). Las condiciones de clave y las condiciones de valor usan espacios de nombres de marcadores separados, así que nunca colisionan.

¿Por qué a veces PartiQL «no se puede expresar»?

PartiQL cubre la mayoría de lecturas y escrituras, pero algunas primitivas de DynamoDB no tienen forma en PartiQL: un INSERT condicional, las acciones de actualización ADD/DELETE sobre sets, y funciones como size(), list_append e if_not_exists. Cuando tu solicitud usa una de ellas, la pestaña de PartiQL te dice exactamente qué función no se puede expresar en lugar de emitir una sentencia que haría algo incorrecto en silencio — usa la salida de SDK, CLI o boto3 para esos casos.

¿Mis datos salen del navegador?

No. El generador se ejecuta enteramente en el lado del cliente: genera las expresiones y los fragmentos de código en tu navegador y nada de lo que escribes se envía a un servidor. La función «Copiar enlace» de la URL serializa tu solicitud en el propio enlace para que puedas compartirlo o guardarlo en marcadores, pero eso queda en tus manos.

Trabaja con DynamoDB sin la Consola

DynoTable es un cliente de escritorio rápido para DynamoDB: explora tablas, ejecuta consultas estilo SQL y edita Items localmente.