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/DELETEdebe apuntar a un elemento por su completa: no hayUPDATE … WHERE status = 'x'de actualización masiva (haz un bucle con un lote en su lugar). - Nada de
JOIN, nada deGROUP BY, nada de agregados (COUNT/SUM/AVG). Consulta PartiQL vs SQL. - Omitir la clave de partición convierte cualquier
SELECTen 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.