PartiQL pour DynamoDB par l'exemple
PartiQL est un langage de requête compatible SQL pour DynamoDB. Il est plus convivial que l'API brute pour le travail ponctuel — mais il s'exécute sur le même moteur, donc les mêmes règles de clé (et les mêmes coûts) s'appliquent sous la syntaxe familière.
SELECT
SELECT * FROM "AppData"
WHERE "PK" = 'CUSTOMER#42' AND begins_with("SK", 'ORDER#')Filtre sur la clé de partition et c'est un Query. Omets la clé de partition et
PartiQL exécute silencieusement un Scan de table entière —
le même piège, juste caché derrière 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'Requêter un index
Utilise le nom de l'index dans la clause FROM :
SELECT * FROM "AppData"."GSI1" WHERE "GSI1PK" = 'STATUS#OPEN'WHERE prend aussi en charge IN, contains() et begins_with() :
SELECT * FROM "AppData"
WHERE "PK" = 'CUSTOMER#42' AND "SK" IN ['ORDER#1', 'ORDER#2']Instructions paramétrées
Utilise des placeholders ? plutôt que d'inliner les valeurs — cela évite les
problèmes de quoting/injection et laisse le SDK marshaller les types pour toi :
SELECT * FROM "AppData" WHERE "PK" = ? AND begins_with("SK", ?)Passe Parameters: [{ S: 'CUSTOMER#42' }, { S: 'ORDER#' }] à ExecuteStatement.
Batch et transactions
BatchExecuteStatement— jusqu'à 25 instructions en un aller-retour. Plus rapide, mais sans atomicité entre items (chacune réussit ou échoue de son côté).ExecuteTransaction— jusqu'à 100 instructions, tout ou rien. Utilise-le quand plusieurs écritures doivent être committées ensemble.
Le piège de PartiQL
PartiQL ressemble à du SQL mais s'exécute sur le moteur DynamoDB, donc les réflexes SQL se retournent contre toi :
- Un seul
UPDATE/DELETEdoit cibler un item par sa clé primaire complète — il n'y a pas de mise à jour de masseUPDATE … WHERE status = 'x'(boucle plutôt avec un batch). - Pas de
JOIN, pas deGROUP BY, pas d'agrégats (COUNT/SUM/AVG). Voir PartiQL vs SQL. - Omettre la clé de partition transforme n'importe quel
SELECTen un Scan de table entière — borné seulement par ta facture.
Quand tu as vraiment besoin d'un JOIN, d'un GROUP BY ou d'un agrégat, le
Workbench SQL de DynoTable les exécute côté client sur les lignes que tu as
récupérées — le SQL que PartiQL ne sait pas parler, dans les limites des modes
d'accès de DynamoDB.
PartiQL ne change pas les types de données sous-jacents — les valeurs transitent toujours sur le réseau en DynamoDB-JSON, que tu peux inspecter avec le convertisseur.
Essaie DynoTable pour exécuter des instructions PartiQL avec autocomplétion et voir les unités de lecture que chacune consomme.