Principiante2 min di lettura

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/DELETE deve mirare a un solo Item tramite la sua chiave primaria completa — non esiste un mass update UPDATE … WHERE status = 'x' (cicla con un batch invece).
  • 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 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.

Aggiornato