DynamoDB supporta SQL?
In parte. DynamoDB supporta PartiQL, un linguaggio di query compatibile con SQL per le istruzioni SELECT, INSERT, UPDATE e DELETE. Non è SQL completo: non ci sono JOIN, GROUP BY e aggregazioni arbitrarie e le query efficienti richiedono ancora il targeting della chiave primaria o di un indice. Se desideri quei pezzi mancanti, SQL Workbench di DynoTable esegue query reali JOIN, GROUP BY e aggregate sulle tabelle DynamoDB dal desktop.
Cosa ti offre PartiQL
Una sintassi familiare SQL per le quattro operazioni sui dati. Puoi scrivere SELECT * FROM "Orders" WHERE ... invece di costruire chiamate API di basso livello, il che è comodo e leggibile.
Quello che non ti dà
- Nessun JOIN: DynamoDB non è relazionale; invece denormalizzi.
- Nessun GRUPPO PER/aggregati: il raggruppamento e la somma avvengono nella tua applicazione.
- Nessuna scansione in formato libero a basso costo: un
SELECTsenza una condizione chiave esegue comunque un Scan e costa di conseguenza.
Dove si ferma il parser
Queste non sono funzionalità che puoi raggiungere con una sintassi diversa. Eseguili e l'affermazione non arriva mai alla lettura di un elemento:
SELECT "region", SUM("total") FROM "Orders" GROUP BY "region"
ValidationException: Unsupported clause: GROUP BY
SELECT COUNT(*) FROM "Orders"
ValidationException: Unexpected path component at 1:8:5
SELECT SUM("total") FROM "Orders"
ValidationException: Unexpected path component at 1:8:3
SELECT DISTINCT "region" FROM "Orders"
ValidationException: Unsupported token in expression: DISTINCTGuarda cosa dicono gli errori aggregati. Non esiste alcuna funzione aggregata che il parser possa disattivare, quindi COUNT(*) viene letto come un percorso di attributo e cade su *, nella colonna 8. Ecco quanto è sottile la superficie SQL.
ORDER BY è quello da conoscere, perché sembra che funzioni:
SELECT * FROM "Orders" WHERE "pk" = 'U#1' ORDER BY "total"
ValidationException: Variable reference total in ORDER BY clause must be part of the primary keyPuoi ordinare in base alla chiave di ordinamento, ascendente o discendente, e nient'altro. L'ordinamento in base a qualsiasi altro attributo è compito della tua applicazione, dopo la lettura.
Il modello mentale
Pensa a PartiQL come a un livello di sintassi su Query, Scan e operazioni di scrittura esistenti di DynamoDB; sotto si applicano le stesse regole del modello di accesso.
SQL reale (JOIN, GROUP BY, aggregati) con DynoTable
PartiQL si ferma a SELECT a tabella singola. SQL Workbench di DynoTable va oltre: esegue le effettive funzioni JOIN, GROUP BY e aggregate (COUNT, SUM, AVG, MIN, MAX) sulle tabelle DynamoDB. Legge gli elementi tramite il normale DynamoDB API, quindi esegue la parte relazionale della query nel client: SQL entro le regole del modello di accesso di DynamoDB, poiché ogni join legge ancora una chiave o un indice reale. Quindi le tre cose che PartiQL non può fare, le scrivi in un'unica dichiarazione:
SELECT c.region, COUNT(*) AS orders, SUM(o.total) AS revenue
FROM Orders o
JOIN Customers c ON o.customerId = c.id
GROUP BY c.regionRimane onesto riguardo ai vincoli sottostanti (un join illimitato è una lettura illimitata), quindi le query più veloci sono quelle il cui join o WHERE raggiunge una chiave o un indice di partizione. Dettagli completi in SQL per DynamoDB e nel manuale del prodotto in /docs/dynamodb-sql-workbench.
Prototipa il lato PartiQL dello stesso modello di dati con
Generatore di query DynamoDB: emette file con ambito partizione
Programmi Query che rimangono sul percorso efficiente PartiQL SELECT utilizza quando una chiave
la condizione è presente.
Approfondisci
Confronta i due in PartiQL vs SQL, vedi Esempi PartiQL e leggi SQL per DynamoDB. Scarica DynoTable per scrivere PartiQL e JOIN, GROUP BY reali e aggregati sulle tue tabelle.
Riferimenti
- PartiQL - un linguaggio di query compatibile con SQL per Amazon DynamoDB — Guida per sviluppatori di Amazon DynamoDB
- Istruzioni di selezione PartiQL per DynamoDB - Guida per sviluppatori Amazon DynamoDB
- Dati Query in DynamoDB (da SQL a NoSQL) — Guida per sviluppatori di Amazon DynamoDB
Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale AWS collegata sopra.
Ogni ValidationException riportato sopra è stato riprodotto il 28-07-2026 rispetto a DynamoDB Local 3.3.0 tramite @aws-sdk/client-dynamodb 3.1095.0 ed è citato testualmente, offset di colonna inclusi.