ValidationException: imprevisto dall'origine

TL;DR — Il nome della tabella nella clausola PartiQL FROM contiene caratteri che il parser non accetterà, di solito un trattino. Racchiudi il nome tra virgolette doppie (SELECT * FROM "my-table"). Le virgolette singole non funzionano: in PartiQL significano una stringa letterale, non un identificatore.

Cosa significa

ValidationException: Unexpected from source

Il parser PartiQL legge FROM my-table come identificatore my seguito da token inaspettati: il trattino non è valido all'interno di un semplice identificatore. DynamoDB i nomi delle tabelle possono contenere legalmente -, . e _, quindi un nome di tabella perfettamente valido può ancora non essere analizzabile in PartiQL finché non viene citato tra virgolette. Lo stesso vale per i nomi che entrano in conflitto con PartiQL parole chiave.

Perché succede

  • Il nome della tabella contiene un trattino o un puntousers-prod, app.events. I semplici identificatori non possono trasportarli.
  • Nomi di tabella generati dal framework: uno strumento che aggiunge un suffisso a un ambiente o a uno stage sul nome della tabella (ad esempio Todo-dev) è il classico modo in cui entra un trattino senza che tu lo scelga.
  • Interrogazione di un indice senza virgolette — il modulo "tabella"."indice" necessita di virgolette doppie per racchiudere entrambe le parti.
  • Virgolette singole invece di doppie — Anche FROM 'my-table' fallisce: le virgolette singole denotano una stringa letterale in PartiQL, non un nome.

Come risolverlo

  1. Racchiudere tra virgolette doppie il nome della tabella:

    SELECT * FROM "users-prod" WHERE pk = 'USER#42'
  2. Racchiudere entrambe le parti tra virgolette doppie quando si esegue una query su un indice:

    SELECT * FROM "users-prod"."email-index" WHERE email = 'ada@example.com'
  3. Mantieni virgolette singole solo per valori stringa: nomi tra virgolette doppie, valori tra virgolette singole. Mescolarli produce esattamente questa classe di errori di analisi.

  4. Quota difensiva nelle istruzioni generate - se il tuo codice interpola i nomi delle tabelle in PartiQL, inseriscili sempre tra virgolette doppie; è valido anche quando il nome non ne avrebbe strettamente bisogno.

  5. Preferire la query nativa quando possibile. Una richiesta Query/Scan elude completamente le regole dell'identificatore PartiQL per letture semplici.

Eseguilo in DynoTable

L'editor PartiQL di DynoTable mette automaticamente tra virgolette doppie i nomi di tabelle e indici: esegui SELECT * FROM "my-table" con la diagnostica in linea prima di incollare l'istruzione nel codice SDK. Apri la tabella con ⌘K per confermare il nome esatto della tabella (compresi i trattini) dalla barra laterale.

Quando l'analisi PartiQL continua a fallire, passa al Builder di query per la richiesta nativa equivalente. Il cambio profilo (⌘P) e Test connessione in Impostazioni → Profili mantengono la dichiarazione puntata sulla tabella a destra. Consulta Connetti a AWS e Installa.

Fonti

Riproducilo

Un'istruzione PartiQL la cui origine FROM non è un nome di tabella. Il parser lo rifiuta prima ancora di cercare una tabella, quindi questo si riproduce su qualsiasi endpoint:

await client.send(new ExecuteStatementCommand({Statement: 'SELECT * FROM 123'}));

Produzione reale:

ValidationException: Unexpected from source
HTTP 400

Confrontalo con un nome senza virgolette ma altrimenti valido: SELECT * FROM repro analizza bene e successivamente fallisce con ResourceNotFoundException se non esiste una tabella di questo tipo. Unexpected from source è strettamente un errore di analisi, quindi leggilo come un segnale di sintassi, non come un segnale di tabella mancante.

Errori correlati

Riferimenti

Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale del AWS collegata sopra.

Riprodotto il 26-07-2026 rispetto a DynamoDB Local 2.x con AWS SDK per JavaScript v3.1095.0: l'output sopra è letterale.

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.