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 SELECT senza 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: DISTINCT

Guarda 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 key

Puoi 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.region

Rimane 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

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.

Lavora con DynamoDB senza la Console

Un client desktop veloce per DynamoDB che esegue il vero SQL che DynamoDB non può — JOINs, GROUP BY, aggregazioni — con modifica visuale e un agente AI sulle tue chiavi Bedrock.

Prova gratuita di 30 giorni, senza carta di credito — poi il piano Free senza limiti di tempo.