Principiante2 min de lectura

PartiQL para DynamoDB con ejemplos

PartiQL es un lenguaje de consulta compatible con SQL para DynamoDB. Es más amable que la API en bruto para el trabajo ad hoc —pero se ejecuta sobre el mismo motor, así que se aplican las mismas reglas de clave (y los mismos costes) por debajo de la sintaxis familiar.

SELECT

SELECT * FROM "AppData"
WHERE "PK" = 'CUSTOMER#42' AND begins_with("SK", 'ORDER#')

Filtra por la clave de partición y esto es un Query. Omite la clave de partición y PartiQL ejecuta en silencio un Scan de tabla completa —el mismo footgun, solo que oculto tras un SELECT *.

INSERT

INSERT INTO "AppData" VALUE {'PK': 'CUSTOMER#42', 'SK': 'PROFILE', 'plan': 'pro'}

UPDATE

UPDATE "AppData" SET "plan" = 'enterprise'
WHERE "PK" = 'CUSTOMER#42' AND "SK" = 'PROFILE'

DELETE

DELETE FROM "AppData"
WHERE "PK" = 'CUSTOMER#42' AND "SK" = 'ORDER#2026-001'

Consultar un índice

Usa el nombre del índice en la cláusula FROM:

SELECT * FROM "AppData"."GSI1" WHERE "GSI1PK" = 'STATUS#OPEN'

WHERE también admite IN, contains() y begins_with():

SELECT * FROM "AppData"
WHERE "PK" = 'CUSTOMER#42' AND "SK" IN ['ORDER#1', 'ORDER#2']

Sentencias parametrizadas

Usa marcadores de posición ? en lugar de incrustar los valores —evita los problemas de comillas/inyección y deja que el SDK marshalle los tipos por ti:

SELECT * FROM "AppData" WHERE "PK" = ? AND begins_with("SK", ?)

Pasa Parameters: [{ S: 'CUSTOMER#42' }, { S: 'ORDER#' }] a ExecuteStatement.

Lotes y transacciones

  • BatchExecuteStatement — hasta 25 sentencias en un solo viaje de ida y vuelta. Más rápido, pero sin atomicidad entre Items (cada una tiene éxito o falla por su cuenta).
  • ExecuteTransaction — hasta 100 sentencias, todo o nada. Úsalo cuando varias escrituras deban confirmarse juntas.

El footgun de PartiQL

PartiQL parece SQL pero se ejecuta sobre el motor de DynamoDB, así que los hábitos de SQL salen mal:

  • Un único UPDATE/DELETE debe apuntar a un Item por su clave primaria completa —no hay un UPDATE … WHERE status = 'x' de actualización masiva (itera con un lote en su lugar).
  • Sin JOIN, sin GROUP BY, sin agregados (COUNT/SUM/AVG). Consulta PartiQL frente a SQL.
  • Omitir la clave de partición convierte cualquier SELECT en un Scan de tabla completa —limitado solo por tu factura.

Cuando de verdad necesitas un JOIN, un GROUP BY o un agregado, el SQL Workbench de DynoTable los ejecuta en el lado del cliente sobre las filas que has extraído —el SQL que PartiQL no sabe hablar, dentro de las reglas de patrones de acceso de DynamoDB.

PartiQL no cambia los tipos de datos subyacentes —los valores siguen viajando por el cable como DynamoDB-JSON, que puedes inspeccionar con el conversor.

Prueba DynoTable para ejecutar sentencias PartiQL con autocompletado y ver las unidades de lectura que consume cada una.

Actualizado