Principiante2 min di lettura

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/DELETE deve puntare a un item tramite la sua completa — non esiste alcun UPDATE … WHERE status = 'x' per un aggiornamento di massa (fai invece un ciclo con un batch).
  • Nessun JOIN, nessun GROUP BY, nessun aggregato (COUNT/SUM/AVG). Vedi PartiQL vs SQL.
  • Omettere la partition key trasforma qualsiasi SELECT in 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.

Aggiornato