PartiQL per DynamoDB con esempi
PartiQL è un linguaggio di query compatibile con SQL per DynamoDB. È più amichevole dell' API grezza per il lavoro ad hoc — ma gira sullo stesso motore, quindi le stesse regole sulle chiavi (e gli stessi costi) si applicano sotto la sintassi familiare.
SELECT
SELECT * FROM "AppData"
WHERE "PK" = 'CUSTOMER#42' AND begins_with("SK", 'ORDER#')Filtra sulla partition key e questa è una Query. Ometti la partition key e
PartiQL esegue silenziosamente uno Scan dell'intera tabella — stesso trabocchetto,
solo nascosto dietro 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'Interrogare un indice
Usa il nome dell'indice nella clausola FROM:
SELECT * FROM "AppData"."GSI1" WHERE "GSI1PK" = 'STATUS#OPEN'WHERE supporta anche IN, contains() e begins_with():
SELECT * FROM "AppData"
WHERE "PK" = 'CUSTOMER#42' AND "SK" IN ['ORDER#1', 'ORDER#2']Statement parametrizzati
Usa i placeholder ? invece di inserire i valori inline — evita problemi di
quoting/injection e lascia che l'SDK faccia il marshal dei tipi al posto tuo:
SELECT * FROM "AppData" WHERE "PK" = ? AND begins_with("SK", ?)Passa Parameters: [{ S: 'CUSTOMER#42' }, { S: 'ORDER#' }] a ExecuteStatement.
Batch e transazioni
BatchExecuteStatement— fino a 25 statement in un solo round trip. Più veloce, ma senza atomicità tra Item (ognuno ha successo o fallisce per conto proprio).ExecuteTransaction— fino a 100 statement, tutto o niente. Usalo quando più scritture devono fare commit insieme.
Il trabocchetto di PartiQL
PartiQL sembra SQL ma gira sul motore DynamoDB, quindi le abitudini SQL si ritorcono contro:
- Un singolo
UPDATE/DELETEdeve mirare a un solo Item tramite la sua chiave primaria completa — non esiste un mass updateUPDATE … WHERE status = 'x'(cicla con un batch invece). - Nessun
JOIN, nessunGROUP BY, nessun aggregato (COUNT/SUM/AVG). Vedi PartiQL vs SQL. - Omettere la partition key trasforma qualsiasi
SELECTin uno Scan dell'intera tabella Scan — limitato solo dalla tua bolletta.
Quando hai davvero bisogno di un JOIN, un GROUP BY o un aggregato, il Workbench SQL
di DynoTable li esegue lato client sulle righe che hai estratto — l'SQL che PartiQL
non sa parlare, nel rispetto delle regole di pattern di accesso di DynamoDB.
PartiQL non cambia i tipi di dati sottostanti — i valori viaggiano comunque sul wire come DynamoDB-JSON, che puoi ispezionare con il convertitore.
Prova DynoTable per eseguire statement PartiQL con il completamento automatico e vedere le unità di lettura che ciascuno consuma.