Interrogazione dei dati - 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 dei dati

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

La visualizzazione utente restituisce solo l'ultima revisione non eliminata dei dati utente. Questa è la visualizzazione predefinita in AmazonQLDB. Ciò significa che non sono necessari qualificatori speciali quando si desidera interrogare solo i dati.

Per i dettagli sulla sintassi e i parametri dei seguenti esempi di query, consulta SELECT il riferimento di Amazon QLDB PartiQL.

Interrogazioni di base

SELECTLe interrogazioni di base restituiscono i documenti inseriti nella tabella.

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.

Le seguenti interrogazioni mostrano i risultati dei documenti di immatricolazione dei veicoli in cui sono stati inseriti in precedenza. Creazione di tabelle con indici e inserimento di documenti L'ordine dei risultati non è specifico e può variare per ogni SELECT interrogazione. Non dovresti fare affidamento sull'ordine dei risultati per nessuna query inQLDB.

SELECT * FROM VehicleRegistration WHERE LicensePlateNumber IN ('LEWISR261LL', 'CA762X')
{ VIN: "1N4AL11D75C109151", LicensePlateNumber: "LEWISR261LL", State: "WA", City: "Seattle", PendingPenaltyTicketAmount: 90.25, ValidFromDate: 2017-08-21T, ValidToDate: 2020-05-11T, Owners: { PrimaryOwner: { PersonId: "294jJ3YUoH1IEEm8GSabOs" }, SecondaryOwners: [{ PersonId: "5Ufgdlnj06gF5CWcOIu64s" }] } }, { VIN: "KM8SRDHF6EU074761", LicensePlateNumber: "CA762X", State: "WA", City: "Kent", PendingPenaltyTicketAmount: 130.75, ValidFromDate: 2017-09-14T, ValidToDate: 2020-06-25T, Owners: { PrimaryOwner: { PersonId: "IN7MvYtUjkp1GMZu0F6CG9" }, SecondaryOwners: [] } }
SELECT * FROM Vehicle WHERE VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
{ VIN: "1N4AL11D75C109151", Type: "Sedan", Year: 2011, Make: "Audi", Model: "A5", Color: "Silver" }, { VIN: "KM8SRDHF6EU074761", Type: "Sedan", Year: 2015, Make: "Tesla", Model: "Model S", Color: "Blue" }
Importante

In PartiQL, si utilizzano virgolette singole per indicare stringhe nel linguaggio di manipolazione dei dati () o nelle istruzioni di query. DML Tuttavia, la QLDB console e la QLDB shell restituiscono i risultati della query in formato testo Amazon Ion, quindi le stringhe sono racchiuse tra virgolette doppie.

Questa sintassi consente al linguaggio di query PartiQL di SQL mantenere la compatibilità e al formato di testo Amazon Ion di mantenere JSON la compatibilità.

Proiezioni e filtri

È possibile eseguire proiezioni (mirateSELECT) e altri filtri standard (WHEREclausole). La seguente query restituisce un sottoinsieme di campi del documento dalla tabella. VehicleRegistration Filtra i veicoli con i seguenti criteri:

  • String filter: è registrato a Seattle.

  • Filtro decimale: ha un importo della penalità in sospeso inferiore a. 100.0

  • Filtro per data: ha una data di registrazione valida a partire dal 4 settembre 2019.

SELECT r.VIN, r.PendingPenaltyTicketAmount, r.Owners FROM VehicleRegistration AS r WHERE r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761') AND r.City = 'Seattle' --string AND r.PendingPenaltyTicketAmount < 100.0 --decimal AND r.ValidToDate >= `2019-09-04T` --timestamp with day precision
{ VIN: "1N4AL11D75C109151", PendingPenaltyTicketAmount: 90.25, Owners: { PrimaryOwner: { PersonId: "294jJ3YUoH1IEEm8GSabOs" }, SecondaryOwners: [{ PersonId: "5Ufgdlnj06gF5CWcOIu64s" }] } }

Join

Puoi anche scrivere query di join interne. L'esempio seguente mostra una query di inner join implicita che restituisce tutti i documenti di immatricolazione insieme agli attributi dei veicoli registrati.

SELECT * FROM VehicleRegistration AS r, Vehicle AS v WHERE r.VIN = v.VIN AND r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
{ VIN: "1N4AL11D75C109151", LicensePlateNumber: "LEWISR261LL", State: "WA", City: "Seattle", PendingPenaltyTicketAmount: 90.25, ValidFromDate: 2017-08-21T, ValidToDate: 2020-05-11T, Owners: { PrimaryOwner: { PersonId: "294jJ3YUoH1IEEm8GSabOs" }, SecondaryOwners: [{ PersonId: "5Ufgdlnj06gF5CWcOIu64s" }] }, Type: "Sedan", Year: 2011, Make: "Audi", Model: "A5", Color: "Silver" }, { VIN: "KM8SRDHF6EU074761", LicensePlateNumber: "CA762X", State: "WA", City: "Kent", PendingPenaltyTicketAmount: 130.75, ValidFromDate: 2017-09-14T, ValidToDate: 2020-06-25T, Owners: { PrimaryOwner: { PersonId: "IN7MvYtUjkp1GMZu0F6CG9" }, SecondaryOwners: [] }, Type: "Sedan", Year: 2015, Make: "Tesla", Model: "Model S", Color: "Blue" }

In alternativa, è possibile scrivere la stessa query di join interno nella sintassi esplicita come segue.

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

Dati annidati

È possibile utilizzare PartiQl in QLDB per interrogare i dati annidati nei documenti. L'esempio seguente mostra una sottoquery correlata che appiattisce i dati annidati. Il @ personaggio è tecnicamente opzionale qui. Ma indica esplicitamente che vuoi la Owners struttura all'internoVehicleRegistration, non una raccolta con un nome diverso Owners (se ne esiste una).

SELECT r.VIN, o.SecondaryOwners FROM VehicleRegistration AS r, @r.Owners AS o WHERE r.VIN IN ('1N4AL11D75C109151', 'KM8SRDHF6EU074761')
{ VIN: "1N4AL11D75C109151", SecondaryOwners: [{ PersonId: "5Ufgdlnj06gF5CWcOIu64s" }] }, { VIN: "KM8SRDHF6EU074761", SecondaryOwners: [] }

Di seguito viene mostrata una sottoquery nell'SELECTelenco che proietta dati annidati, oltre a un inner join.

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')
{ Make: "Audi", Model: "A5", PrimaryOwner: ["294jJ3YUoH1IEEm8GSabOs"] }, { Make: "Tesla", Model: "Model S", PrimaryOwner: ["IN7MvYtUjkp1GMZu0F6CG9"] }

La seguente query restituisce il PersonId numero di indice (ordinale) di ogni persona nell'Owners.SecondaryOwnerselenco di un documento. VehicleRegistration

SELECT s.PersonId, owner_idx FROM VehicleRegistration AS r, @r.Owners.SecondaryOwners AS s AT owner_idx WHERE r.VIN = '1N4AL11D75C109151'
{
    PersonId: "5Ufgdlnj06gF5CWcOIu64s",
    owner_idx: 0
}

Per informazioni su come interrogare i metadati del documento, procedi a. Interrogazione dei metadati dei documenti