Principiante3 min de lectura

PartiQL para DynamoDB con ejemplos

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

¿Cómo se escriben consultas PartiQL para DynamoDB?

PartiQL le da a DynamoDB cuatro sentencias con forma de SQL —SELECT, INSERT, UPDATE y DELETE— ejecutadas mediante ExecuteStatement. Cada una compila a una operación nativa por debajo, así que filtrar por la sigue siendo una Query mientras que omitirla se convierte en un Scan de tabla completa. Las escrituras siguen apuntando a un elemento por su ; no hay JOIN, GROUP BY ni agregados relacionales.

SELECT

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

Filtra por la y esto es una Query. Omite la clave de partición y PartiQL ejecuta en silencio un Scan de tabla completa: el mismo tiro por la culata, 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 ? en lugar de incrustar valores: esquiva los problemas de entrecomillado/inyección y deja que el SDK haga el marshalling de 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 viaje de ida y vuelta. Más rápido, pero sin atomicidad entre elementos (cada una se completa o falla por su cuenta).
  • ExecuteTransaction — hasta 100 sentencias, todo o nada. Úsalo cuando varias escrituras deban confirmarse juntas.

El tiro por la culata de PartiQL

PartiQL parece SQL pero se ejecuta sobre el motor de DynamoDB, así que los hábitos de SQL se vuelven en tu contra:

  • Un único UPDATE/DELETE debe apuntar a un elemento por su completa: no hay UPDATE … WHERE status = 'x' de actualización masiva (haz un bucle con un lote en su lugar).
  • Nada de JOIN, nada de GROUP BY, nada de agregados (COUNT/SUM/AVG). Consulta PartiQL vs SQL.
  • Omitir la clave de partición convierte cualquier SELECT en un Scan de tabla completa, acotado solo por tu factura.

Cuando realmente necesites un JOIN, un GROUP BY o un agregado, el Workbench SQL de DynoTable los ejecuta en el cliente sobre las filas que ya has traído: el SQL que PartiQL no sabe hablar, dentro de las reglas de patrón 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 consciente del esquema y explorar los resultados en una vista de tabla ordenable.

Actualizado