PartiQL per DynamoDB con esempi
è un linguaggio di query SQL-compatibile 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.
Come si scrivono query PartiQL per DynamoDB?
PartiQL dà a DynamoDB quattro istruzioni in forma SQL — SELECT, INSERT, UPDATE
e DELETE — eseguite tramite ExecuteStatement. Ognuna compila in un'operazione
nativa sottostante, quindi filtrare sulla resta una
Query mentre ometterla diventa uno Scan dell'intera tabella. Le scritture puntano
comunque a un solo item tramite la sua ; non c'è alcun JOIN
relazionale, GROUP BY o aggregato.
SELECT
SELECT * FROM "AppData"
WHERE "PK" = 'CUSTOMER#42' AND begins_with("SK", 'ORDER#')Filtra sulla e questa è una Query. Ometti la partition key e
PartiQL esegue silenziosamente uno Scan dell'intera tabella —
lo stesso footgun, 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']Istruzioni parametrizzate
Usa i placeholder ? invece di inserire i valori inline — evita i problemi di
quoting/injection e lascia che l'SDK esegua il marshalling dei tipi per te:
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 istruzioni in un solo round trip. Più veloce, ma senza atomicità cross-item (ognuna riesce o fallisce per conto suo).ExecuteTransaction— fino a 100 istruzioni, tutto-o-niente. Usalo quando più scritture devono fare commit insieme.
Il footgun di PartiQL
PartiQL sembra SQL ma gira sul motore di DynamoDB, quindi le abitudini SQL si ritorcono contro:
- Un singolo
UPDATE/DELETEdeve puntare a un item tramite la sua completa — non esiste alcunUPDATE … WHERE status = 'x'per un aggiornamento di massa (fai invece un ciclo con un batch). - 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 — limitato solo dalla tua bolletta.
Quando hai davvero bisogno di un JOIN, di un GROUP BY o di un aggregato, il SQL
Workbench di DynoTable li esegue lato client sulle righe che hai estratto — il SQL
che PartiQL non sa parlare, dentro le regole di access pattern di DynamoDB.
PartiQL non cambia i tipi di dati sottostanti — i valori viaggiano ancora sul filo come DynamoDB-JSON, che puoi ispezionare con il converter.
Prova DynoTable per eseguire istruzioni PartiQL con autocompletamento schema-aware e sfogliare i risultati in una table view ordinabile.