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

SELECTcomando 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

In AmazonQLDB, usa il SELECT comando per recuperare i dati da una o più tabelle. Ogni SELECT richiesta in entrata QLDB viene elaborata in una transazione ed è soggetta a un limite di timeout della transazione.

L'ordine dei risultati non è specifico e può variare per ogni SELECT query. Non dovresti fare affidamento sull'ordine dei risultati per nessuna query inQLDB.

Per informazioni su come controllare l'accesso per eseguire questo comando PartiQL su tabelle specifiche, vedere. Guida introduttiva alla modalità di autorizzazione standard in Amazon QLDB

avvertimento

Quando si esegue una query QLDB senza una ricerca indicizzata, viene richiamata una scansione completa della tabella. PartiQL supporta tali query perché è compatibile. SQL Tuttavia, non eseguite scansioni di tabelle per casi d'uso di produzione in. QLDB Le scansioni delle tabelle possono causare problemi di prestazioni su tabelle di grandi dimensioni, inclusi conflitti di concorrenza e timeout delle transazioni.

Per evitare le scansioni delle tabelle, è necessario eseguire istruzioni con una clausola di WHERE predicato utilizzando un operatore di uguaglianza su un campo indicizzato o un ID di documento; ad esempio, o. WHERE indexedField = 123 WHERE indexedField IN (456, 789) Per ulteriori informazioni, consulta Ottimizzazione delle prestazioni delle query.

Sintassi

SELECT [ VALUE ] expression [ AS field_alias ] [, expression, ... ] FROM source [ AS source_alias ] [ AT idx_alias ] [ BY id_alias ] [, source, ... ] [ WHERE condition ]

Parametri

VALUE

Un qualificatore per l'espressione che fa sì che la query restituisca il valore del tipo di dati non elaborato, anziché il valore racchiuso in una struttura a tuple.

expression

Una proiezione formata dal carattere * jolly o da un elenco di proiezione di uno o più campi del documento del set di risultati. Un'espressione può essere costituita da chiamate a Funzioni PartiQL o da campi modificati da Operatori PartiQL.

AS field_alias

(Facoltativo) Un alias temporaneo definito dall'utente per il campo utilizzato nel set di risultati finale. La AS parola chiave è facoltativa.

Se non si specifica un alias per un'espressione che non è un semplice nome di campo, il set di risultati applica un nome predefinito a quel campo.

FROM source

Una fonte da interrogare. Le uniche fonti attualmente supportate sono i nomi delle tabelle, i join interni tra le tabelle, le SELECT query annidate (soggette aLimitazioni delle query annidate) e le chiamate alle funzioni di cronologia per una tabella.

È necessario specificare almeno una fonte. Le fonti multiple devono essere separate da virgole.

AS source_alias

(Facoltativo) Un alias definito dall'utente che si estende su una fonte da interrogare. Tutti gli alias di origine utilizzati nella clausola SELECT OR devono essere dichiarati nella WHERE clausola. FROM La AS parola chiave è facoltativa.

AT idx_alias

(Facoltativo) Un alias definito dall'utente che si collega al numero di indice (ordinale) di ogni elemento all'interno di un elenco dall'origine. L'alias deve essere dichiarato nella clausola utilizzando la FROM parola chiave. AT

BY id_alias

(Facoltativo) Un alias definito dall'utente che si collega al campo dei id metadati di ogni documento nel set di risultati. L'alias deve essere dichiarato nella clausola utilizzando la FROM parola chiave. BY Ciò è utile quando si desidera proiettare o filtrare l'ID del documento durante l'interrogazione della visualizzazione utente predefinita. Per ulteriori informazioni, consulta Utilizzo della clausola BY per interrogare l'ID del documento.

WHERE condition

I criteri di selezione e i criteri di unione (se applicabili) per l'interrogazione.

Nota

Se si WHERE omette la clausola, vengono recuperati tutti i documenti della tabella.

Join

Attualmente sono supportati solo i join interni. È possibile scrivere query di inner join utilizzando la INNER JOIN clausola esplicita, come segue. In questa sintassi, JOIN deve essere abbinato a e la parola chiave è ON facoltativa. INNER

SELECT expression FROM table1 AS t1 [ INNER ] JOIN table2 AS t2 ON t1.element = t2.element

In alternativa, è possibile scrivere join interni utilizzando la sintassi implicita, come segue.

SELECT expression FROM table1 AS t1, table2 AS t2 WHERE t1.element = t2.element

Limitazioni delle query annidate

È possibile scrivere interrogazioni annidate (sottoquery) all'interno SELECT di espressioni e sorgenti. FROM La restrizione principale è che solo la query più esterna può accedere all'ambiente globale del database. Si supponga, ad esempio, di disporre di un registro con tabelle e. VehicleRegistration Person La seguente query annidata non è valida perché quella interna SELECT tenta di accedere. Person

SELECT r.VIN, (SELECT p.PersonId FROM Person AS p WHERE p.PersonId = r.Owners.PrimaryOwner.PersonId) AS PrimaryOwner FROM VehicleRegistration AS r

La seguente interrogazione annidata è invece valida.

SELECT r.VIN, (SELECT o.PrimaryOwner.PersonId FROM @r.Owners AS o) AS PrimaryOwner FROM VehicleRegistration AS r

Esempi

La seguente query mostra un carattere jolly di base SELECT con una clausola di WHERE predicato standard che utilizza l'operatore. IN

SELECT * FROM Vehicle WHERE VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')

Di seguito vengono illustrate le SELECT proiezioni con un filtro a stringa.

SELECT FirstName, LastName, Address FROM Person WHERE Address LIKE '%Seattle%' AND GovId = 'LEWISR261LL'

Di seguito viene mostrata una sottoquery correlata che appiattisce i dati annidati. Nota che qui il @ carattere è tecnicamente facoltativo. Ma indica esplicitamente che si desidera la Owners struttura annidata all'internoVehicleRegistration, non una raccolta con nome diverso Owners (se ne esistesse una). Per un contesto più approfondito, Dati annidati consultate il capitolo Lavorare con dati e cronologia.

SELECT r.VIN, o.SecondaryOwners FROM VehicleRegistration AS r, @r.Owners AS o WHERE r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')

Di seguito viene mostrata una sottoquery nell'SELECTelenco che proietta dati annidati e un inner join implicito.

SELECT v.Make, v.Model, (SELECT VALUE o.PrimaryOwner.PersonId FROM @r.Owners AS o) AS PrimaryOwner FROM VehicleRegistration AS r, Vehicle AS v WHERE r.VIN = v.VIN AND r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')

Di seguito viene illustrato un inner join esplicito.

SELECT v.Make, v.Model, r.Owners FROM VehicleRegistration AS r JOIN Vehicle AS v ON r.VIN = v.VIN WHERE r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')

Quanto segue mostra una proiezione del campo di id metadati del documento, utilizzando la clausola. BY

SELECT r_id, r.VIN FROM VehicleRegistration AS r BY r_id WHERE r_id = 'documentId'

Di seguito viene utilizzata la BY clausola per unire le Person tabelle DriversLicense e rispettivamente nei relativi campi e nel relativo PersonId campo del documento. id

SELECT * FROM DriversLicense AS d INNER JOIN Person AS p BY pid ON d.PersonId = pid WHERE pid = 'documentId'

Di seguito viene utilizzata la Vista impegnata per unire rispettivamente i campi DriversLicense e le Person tabelle nei rispettivi id campi PersonId e in quelli del documento.

SELECT * FROM DriversLicense AS d INNER JOIN _ql_committed_Person AS cp ON d.PersonId = cp.metadata.id WHERE cp.metadata.id = 'documentId'

Quanto segue restituisce PersonId il numero di indice (ordinale) di ogni persona nell'Owners.SecondaryOwnerselenco di un documento nella tabellaVehicleRegistration.

SELECT s.PersonId, owner_idx FROM VehicleRegistration AS r, @r.Owners.SecondaryOwners AS s AT owner_idx WHERE r.VIN = 'KM8SRDHF6EU074761'

Esecuzione a livello di codice utilizzando il driver

Per informazioni su come eseguire questa istruzione a livello di codice utilizzando il QLDB driver, consulta i seguenti tutorial in Guida introduttiva al driver: