Interrogazione di Ion con PartiQL in Amazon QLDB - Database Amazon Quantum Ledger (Amazon QLDB)

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Interrogazione di Ion con PartiQL in Amazon QLDB

Quando esegui una query sui dati in Amazon QLDB, scrivi le istruzioni in formato PartiQL, ma QLDB restituisce i risultati in formato Amazon Ion. PartiQL è pensato per essere compatibile con SQL, mentre Ion è un'estensione di JSON. Ciò comporta differenze sintattiche tra il modo in cui si annotano i dati nelle istruzioni di interrogazione e il modo in cui vengono visualizzati i risultati della query.

Questa sezione descrive la sintassi e la semantica di base per eseguire manualmente le istruzioni PartiQL utilizzando la console QLDB o la shell QLDB.

Suggerimento

Quando si eseguono interrogazioni PartiQL in modo programmatico, la procedura migliore consiste nell'utilizzare istruzioni parametrizzate. È possibile utilizzare un punto interrogativo (?) come segnaposto della variabile di associazione nelle dichiarazioni per evitare queste regole di sintassi. Questo è anche più sicuro ed efficiente.

Per ulteriori informazioni, consulta i seguenti tutorial in Guida introduttiva al driver:

Sintassi e semantica

Quando si utilizza la console QLDB o la shell QLDB per interrogare i dati Ion, le seguenti sono la sintassi e la semantica fondamentali di PartiQL:

Distinzione tra lettere maiuscole e minuscole

Tutti i nomi degli oggetti del sistema QLDB, inclusi i nomi dei campi, i nomi delle tabelle e i nomi dei registri, fanno distinzione tra maiuscole e minuscole.

Valori di stringa

In Ion, le virgolette doppie ("...") indicano una stringa.

In PartiQL, le virgolette singole ('...') indicano una stringa.

Simboli e identificatori

In Ion, le virgolette singole ('...') indicano un simbolo. Un sottoinsieme di simboli in Ion chiamati identificatori è rappresentato da testo senza virgolette.

In PartiQL, le virgolette doppie ("...") indicano un identificatore PartiQL tra virgolette, ad esempio una parola riservata utilizzata come nome di tabella. Il testo senza virgolette rappresenta un normale identificatore PartiQL, ad esempio un nome di tabella che non è una parola riservata.

Letterali Ion

Qualsiasi valore letterale Ion può essere indicato con backticks (`...`) in un'istruzione PartiQL.

Nomi di campo

I nomi dei campi Ion fanno distinzione tra maiuscole e minuscole. PartiQL consente di indicare i nomi dei campi con virgolette singole in un'istruzione DML. Questa è un'alternativa abbreviata all'utilizzo dellacast funzione di PartiQL per definire un simbolo. È anche più intuitivo rispetto all'uso delle barrette inverse per indicare un simbolo ionico letterale.

Valori letterali

I valori letterali del linguaggio di interrogazione PartiQL corrispondono ai tipi di dati Ion, come segue:

Scalari

Segui la sintassi SQL quando applicabile, come descritto nellaMappatura del tipo a ioni parziali sezione. Ad esempio:

  • 5

  • 'foo'

  • null

Strutture

Conosciuti anche come tuple o oggetti in molti formati e altri modelli di dati.

Denotato da parentesi ricce ({...}) construct elementi separati da virgole.

  • { 'id' : 3, 'arr': [1, 2] }

Elenchi

Conosciuti anche come array.

Indicato da parentesi quadre ([...]) con elementi dell'elenco separati da virgole.

  • [ 1, 'foo' ]

Borse

Raccolte non ordinate in PartiQL.

Indicato da parentesi a doppio angolo (<<...>>) con elementi del sacchetto separati da virgole. In QLDB, un tavolo può essere paragonato a una borsa. Tuttavia, una borsa non può essere annidata all'interno dei documenti di una tabella.

  • << 1, 'foo' >>

Esempio

Di seguito viene mostrato un esempio della sintassi di un'INSERTistruzione con vari tipi di ioni.

INSERT INTO VehicleRegistration VALUE { 'VIN' : 'KM8SRDHF6EU074761', --string 'RegNum' : 1722, --integer 'State' : 'WA', 'City' : 'Kent', 'PendingPenaltyTicketAmount' : 130.75, --decimal 'Owners' : { --nested struct 'PrimaryOwner' : { 'PersonId': '294jJ3YUoH1IEEm8GSabOs' }, 'SecondaryOwners' : [ --list of structs { 'PersonId' : '1nmeDdLo3AhGswBtyM1eYh' }, { 'PersonId': 'IN7MvYtUjkp1GMZu0F6CG9' } ] }, 'ValidFromDate' : `2017-09-14T`, --Ion timestamp literal with day precision 'ValidToDate' : `2020-06-25T` }

Notazione con contrassegno

PartiQL copre completamente tutti i tipi di dati Ion, in modo da poter scrivere qualsiasi dichiarazione senza utilizzare contrassegni. Ma ci sono casi in cui questa sintassi letterale di Ion può rendere le tue affermazioni più chiare e concise.

Ad esempio, per inserire un documento con timestamp e valori simbolici di Ion, è possibile scrivere la seguente dichiarazione utilizzando solo una sintassi puramente PartiQL.

INSERT INTO myTable VALUE { 'myTimestamp': to_timestamp('2019-09-04T'), 'mySymbol': cast('foo' as symbol) }

Questo è abbastanza dettagliato, quindi puoi invece usare i contrassegni per semplificare la tua dichiarazione.

INSERT INTO myTable VALUE { 'myTimestamp': `2019-09-04T`, 'mySymbol': `foo` }

Puoi anche racchiudere l'intera struttura in barre inverse per risparmiare qualche altra sequenza di tasti.

INSERT INTO myTable VALUE `{ myTimestamp: 2019-09-04T, mySymbol: foo }`
Importante

Le stringhe e i simboli sono classi diverse in PartiQL. Ciò significa che anche se hanno lo stesso testo, non sono uguali. Ad esempio, le seguenti espressioni PartiQL restituiscono valori Ion diversi.

'foo'
`foo`

Navigazione del percorso

Quando si scrivono istruzioni DML (Data Manipulation Language) o interrogazioni, è possibile accedere ai campi all'interno di strutture annidate utilizzando i passaggi del percorso. PartiQL supporta la notazione a punti per accedere ai nomi dei campi di una struttura principale. L'esempio seguente accede alModel campo di un genitoreVehicle.

Vehicle.Model

Per accedere a un elemento specifico di un elenco, è possibile utilizzare l'operatore tra parentesi quadre per indicare un numero ordinale a base zero. L'esempio seguente accede all'elemento diSecondaryOwners con un numero ordinale di2. In altre parole, questo è il terzo elemento dell'elenco.

SecondaryOwners[2]

Alias

QLDB supporta contenuti e schemi aperti. Quindi, quando accedi a determinati campi di un'istruzione, il modo migliore per assicurarti di ottenere i risultati che ti aspetti è usare degli alias. Ad esempio, se non specifichi un alias esplicito, il sistema ne genera uno implicito per le tueFROM fonti.

SELECT VIN FROM Vehicle --is rewritten to SELECT Vehicle.VIN FROM Vehicle AS Vehicle

Tuttavia, i risultati sono imprevedibili in caso di conflitti di nomi di campo. SeVIN esiste un altro campo denominato in una struttura annidata all'interno dei documenti, iVIN valori restituiti da questa interrogazione potrebbero sorprenderti. Come buona pratica, scrivi invece la seguente dichiarazione. Questa query vienev dichiarata come alias che si estende sullaVehicle tabella. LaAS parola chiave è facoltativa.

SELECT v.VIN FROM Vehicle [ AS ] v

L'aliasing è particolarmente utile quando si inserisce il percorso in raccolte annidate all'interno di un documento. Ad esempio, la seguente dichiarazione dichiarao come alias che si estende all'interno della raccoltaVehicleRegistration.Owners.

SELECT o.SecondaryOwners FROM VehicleRegistration AS r, @r.Owners AS o

Il@ personaggio è tecnicamente opzionale qui. Ma indica esplicitamente che si desidera laOwners struttura all'internoVehicleRegistration, non una raccolta con un nome diversoOwners (se ne esiste una).

Specificazione PartiQL

Per ulteriori informazioni sul linguaggio di query PartiQL, vedere la specifica PartiQL.