Interrogare 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à.

Interrogare Ion con PartiQL in Amazon QLDB

Importante

Avviso di fine del supporto: i clienti esistenti potranno utilizzare Amazon QLDB fino alla fine del supporto il 31/07/2025. Per ulteriori dettagli, consulta Migrare un Amazon QLDB Ledger ad Amazon Aurora Postgre. SQL

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

Questa sezione descrive la sintassi e la semantica di base per l'esecuzione manuale delle istruzioni PartiQL utilizzando la console o la QLDB shell. QLDB

Suggerimento

Quando si eseguono query PartiQL a livello di codice, la procedura migliore consiste nell'utilizzare istruzioni con parametri. È possibile utilizzare un punto interrogativo (?) come segnaposto della variabile di associazione nelle istruzioni per evitare queste regole di sintassi. Ciò è anche più sicuro ed efficiente.

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

Sintassi e semantica

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

Distinzione tra lettere maiuscole e minuscole

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

Valori delle stringhe

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.

Valori letterali ionici

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

Nomi di campo

I nomi dei campi ionici 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 della funzione PartiQL per definire un simbolo. cast È anche più intuitivo rispetto all'utilizzo dei backtick per indicare un simbolo ionico letterale.

Valori letterali

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

Scalari

Segui la SQL sintassi quando applicabile, come descritto nella Mappatura del tipo a ioni parziali sezione. Per esempio:

  • 5

  • 'foo'

  • null

Strutture

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

Denotato da parentesi graffe ({...}) con struct elementi separati da virgole.

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

Elenchi

Conosciuti anche come matrici.

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

  • [ 1, 'foo' ]

Borse

Raccolte non ordinate in PartiQL.

Denotato da parentesi a doppio angolo (<<...>>) con elementi della borsa separati da virgole. NelQLDB, un tavolo può essere pensato come una borsa. Tuttavia, una borsa non può essere annidata all'interno dei documenti di una tabella.

  • << 1, 'foo' >>

Esempio

Di seguito è riportato 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 Backtick

PartiQL copre completamente tutti i tipi di dati Ion, quindi puoi scrivere qualsiasi istruzione senza usare backtick. Ma ci sono casi in cui questa sintassi letterale di Ion può rendere le tue dichiarazioni più chiare e concise.

Ad esempio, per inserire un documento con timestamp e valori dei simboli Ion, è possibile scrivere la seguente dichiarazione utilizzando solo la sintassi PartiQL.

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

Si tratta di una procedura piuttosto dettagliata, quindi è possibile utilizzare i backtick per semplificare la dichiarazione.

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

Puoi anche racchiudere l'intera struttura tra i backtick per risparmiare qualche altra pressione 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 scrivi il linguaggio di manipolazione dei dati (DML) o le istruzioni di query, puoi 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 al Model campo di un elemento principale. Vehicle

Vehicle.Model

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

SecondaryOwners[2]

Aliasing

QLDBsupporta contenuti e schemi aperti. Pertanto, quando si accede a campi particolari di un'istruzione, il modo migliore per assicurarsi di ottenere i risultati attesi è utilizzare gli alias. Ad esempio, se non specificate un alias esplicito, il sistema ne genera uno implicito per le vostre fonti. FROM

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

Ma i risultati sono imprevedibili per quanto riguarda i conflitti tra nomi di campo. Se un altro campo denominato VIN esiste in una struttura annidata all'interno dei documenti, i VIN valori restituiti da questa query potrebbero sorprenderti. Come procedura consigliata, scrivete invece la seguente dichiarazione. Questa query viene dichiarata v come un alias che si estende su tutta la Vehicle tabella. La AS parola chiave è facoltativa.

SELECT v.VIN FROM Vehicle [ AS ] v

L'aliasing è particolarmente utile quando si esegue il percorso in raccolte annidate all'interno di un documento. Ad esempio, l'istruzione seguente si dichiara o come un alias che si estende all'interno della raccolta. VehicleRegistration.Owners

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

In questo caso il @ personaggio è tecnicamente opzionale. Ma indica esplicitamente che vuoi la Owners struttura all'internoVehicleRegistration, non una raccolta con un nome diverso Owners (se ne esiste una).

Specificazione PartiQL

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