Strumento gratuito

Generatore di espressioni DynamoDB

Scegli un'operazione, costruisci visivamente la richiesta e copia un'espressione corretta e a prova di parole riservate — con i suoi ExpressionAttributeNames e Values — come AWS SDK v3, CLI, boto3 o PartiQL.

Costruisci la tua richiesta
Codice generato
new QueryCommand({
  "TableName": "MyTable",
  "KeyConditionExpression": "#hashKey = :hashKeyValue AND begins_with(#rangeKey, :rangeKeyValue)",
  "ExpressionAttributeNames": {
    "#hashKey": "pk",
    "#rangeKey": "sk"
  },
  "ExpressionAttributeValues": {
    ":hashKeyValue": {
      "S": "USER#123"
    },
    ":rangeKeyValue": {
      "S": "ORDER#"
    }
  }
})

Perché scrivere a mano le espressioni DynamoDB è soggetto a errori

Una richiesta DynamoDB raramente fallisce nella parte ovvia. Fallisce perché status è una parola riservata e ha bisogno di un alias #, perché un id numerico è stato inviato come stringa e non ha trovato corrispondenze, oppure perché una FilterExpression e una ConditionExpression hanno riutilizzato lo stesso placeholder :v0. Ognuno è un piccolo errore che produce una richiesta che viene eseguita ma restituisce le righe sbagliate — il tipo peggiore da debuggare.

Questo builder assembla l'intera richiesta a partire da un modello tipizzato. Ogni nome di attributo riceve un alias, ogni valore porta un tipo DynamoDB esplicito e i placeholder per chiave, filtro, condizione e aggiornamento vivono in namespace separati, così le collisioni sono impossibili per costruzione. L'output viene costruito dalle etichette di tipo, non indovinato dal tuo testo — un numero resta un numero, una stringa base64 resta binaria.

Le espressioni di aggiornamento e le scritture condizionali ricevono lo stesso trattamento: contatori atomici, if_not_exists, list_append, REMOVE su un indice di lista, ADD/DELETE sui set e condizioni di locking ottimistico si assemblano tutti in un'unica UpdateExpression e ConditionExpression corretta. La Tab PartiQL è onesta — quando una primitiva non ha forma PartiQL, ti dice quale invece di emettere uno statement che si comporta male in silenzio.

Devi prima scegliere tra una Query e uno Scan? Query vs Scan spiega la differenza, e Esempi PartiQL tratta in dettaglio la sintassi in stile SQL.

Domande frequenti

Che cos'è un ExpressionAttributeName e perché i prefissi # e :?

Le espressioni DynamoDB non possono fare riferimento direttamente a un nome di attributo che è una parola riservata (come name, status o size), e un placeholder di valore tiene i dati effettivi fuori dalla stringa dell'espressione. Quindi ogni nome di attributo riceve un alias con un placeholder # in ExpressionAttributeNames e ogni valore con un placeholder : in ExpressionAttributeValues. Questo builder genera quelle mappe al posto tuo, così una parola riservata non rompe mai la tua richiesta.

Perché devo scegliere un tipo (S, N, B…) per ogni valore?

DynamoDB è tipizzato a livello di attributo: il numero 5 è { "N": "5" } e la stringa "5" è { "S": "5" } — valori diversi che corrispondono a Item diversi. Un campo di testo non può distinguerli, quindi il builder ti chiede di etichettare ogni valore. L'output SDK, CLI, boto3 e PartiQL prodotto viene costruito da quell'etichetta, mai indovinato dal testo, così un id numerico resta un numero e un blob base64 resta binario.

Può costruire espressioni di aggiornamento e scritture condizionali?

Sì. Update copre SET (incluso if_not_exists, contatori atomici +/- e list_append), REMOVE (incluso un indice di lista come #a[2]), ADD (numero o set) e DELETE (membri di un set) — combinati in un'unica UpdateExpression. Le scritture condizionali aggiungono una ConditionExpression a Update, Put o Delete per il locking ottimistico (attribute_not_exists, un controllo di versione e così via). Le condizioni sulle chiavi e le condizioni sui valori usano namespace di placeholder separati, così non entrano mai in collisione.

Perché PartiQL a volte è «non esprimibile»?

PartiQL copre la maggior parte delle letture e scritture, ma alcune primitive DynamoDB non hanno una forma PartiQL: un INSERT condizionale, le azioni di aggiornamento ADD/DELETE sui set e funzioni come size(), list_append e if_not_exists. Quando la tua richiesta ne usa una, la Tab PartiQL ti dice esattamente quale funzionalità non è esprimibile invece di emettere uno statement che farebbe silenziosamente la cosa sbagliata — per quei casi usa l'output SDK, CLI o boto3.

I miei dati lasciano il browser?

No. Il builder viene eseguito interamente lato client — genera le espressioni e gli snippet di codice nel tuo browser e nulla di ciò che digiti viene inviato a un server. La funzione «Copia link» dell'URL serializza la tua richiesta nel link stesso così puoi condividerlo o aggiungerlo ai preferiti, ma resta nelle tue mani.

Lavora con DynamoDB senza la Console

DynoTable è un client desktop veloce per DynamoDB — sfoglia le tabelle, esegui query in stile SQL e modifica gli Item localmente.