

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
<a name="ql-reference.query"></a>

**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 registro Amazon QLDB su Amazon Aurora PostgreSQL](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/).

Quando esegui query sui dati in Amazon QLDB, scrivi istruzioni in formato PartiQL, ma QLDB restituisce risultati in formato Amazon Ion. PartiQL è pensato per essere compatibile con SQL, 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 QLDB o la shell QLDB.](data-shell.md)](console_QLDB.md)

**Suggerimento**  
Quando si eseguono query PartiQL a livello di codice, è consigliabile 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*:  
Java: \$1 [Tutorial di avvio rapido](driver-quickstart-java.md) [Riferimento al libro di cucina](driver-cookbook-java.md)
.NET: [Tutorial di avvio rapido](driver-quickstart-dotnet.md) \$1 [Riferimento al libro di cucina](driver-cookbook-dotnet.md)
Vai: [Tutorial di avvio rapido](driver-quickstart-golang.md) \$1 [Riferimento al libro di cucina](driver-cookbook-golang.md)
Node.js: [Tutorial di avvio rapido](driver-quickstart-nodejs.md) \$1 [Riferimento al libro di cucina](driver-cookbook-nodejs.md)
Python: \$1 [Tutorial di avvio rapido](driver-quickstart-python.md) [Riferimento al libro di cucina](driver-cookbook-python.md)

**Topics**
+ [Sintassi e semantica](#ql-reference.query.syntax)
+ [Notazione Backtick](#ql-reference.query.backtick)
+ [Navigazione del percorso](#ql-reference.query.pathing)
+ [Aliasing](#ql-reference.query.aliasing)
+ [Specificazione PartiQL](#ql-reference.query.spec)

## Sintassi e semantica
<a name="ql-reference.query.syntax"></a>

Quando si utilizza la console QLDB o la shell QLDB 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 del sistema QLDB, inclusi i nomi di campo, i nomi delle tabelle e i nomi contabili, fanno distinzione tra maiuscole e minuscole.

**Valori di stringa**  
[In Ion, le virgolette doppie (`"..."`) indicano una stringa.](https://amzn.github.io/ion-docs/docs/spec.html#string)  
In PartiQL, le virgolette singole (`'...'`) indicano una stringa.

**Simboli e identificatori**  
[In Ion, le virgolette singole (`'...'`) indicano un simbolo.](https://amzn.github.io/ion-docs/docs/spec.html#symbol) 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](ql-reference.reserved.md) 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
<a name="ql-reference.query.literals"></a>

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

**Scalari**  
Se applicabile, seguire la sintassi SQL, come descritto nella [Mappatura del tipo a ioni parziali](ql-reference.docs.md#ql-reference.docs.types) 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. In QLDB, un tavolo può essere considerato come una borsa. Tuttavia, una borsa non può essere annidata all'interno dei documenti di una tabella.  
+ `<< 1, 'foo' >>`

### Esempio
<a name="ql-reference.query.example"></a>

Di seguito è riportato un esempio della sintassi di un'`INSERT`istruzione 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
<a name="ql-reference.query.backtick"></a>

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
<a name="ql-reference.query.pathing"></a>

Quando si scrivono istruzioni DML (Data Manipulation Language) o di interrogazione, è 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 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 di`SecondaryOwners`. `2` In altre parole, questo è il terzo elemento dell'elenco.

```
SecondaryOwners[2]
```

## Aliasing
<a name="ql-reference.query.aliasing"></a>

QLDB supporta contenuti e schemi aperti. Pertanto, quando accedi a campi particolari in un'istruzione, il modo migliore per assicurarti 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
```

Tuttavia, 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 ottimale, 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
```

Il `@` personaggio è tecnicamente opzionale qui. Ma indica esplicitamente che vuoi la `Owners` struttura all'interno`VehicleRegistration`, non una raccolta con un nome diverso `Owners` (se ne esiste una).

## Specificazione PartiQL
<a name="ql-reference.query.spec"></a>

[Per ulteriori informazioni sul linguaggio di query PartiQL, vedere la specifica PartiQL.](https://partiql.org/assets/PartiQL-Specification.pdf)