Interrogation de données - Amazon Quantum Ledger Database (Amazon QLDB)

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Interrogation de données

La vue utilisateur renvoie uniquement la dernière révision non supprimée de vos données utilisateur. Il s'agit de la vue par défaut dans Amazon QLDB. Cela signifie qu'aucun qualificatif spécial n'est nécessaire lorsque vous souhaitez interroger uniquement vos données.

Pour plus d'informations sur la syntaxe et les paramètres des exemples de requêtes suivants, consultezSELECT la référence Amazon QLDB PartiQL.

Requête de base

Les tablesSELECT de base renvoient les documents que vous avez insérés dans la table.

Avertissement

Lorsque vous exécutez une requête dans QLDB sans recherche indexée, elle appelle une analyse complète de la table. PartiQL prend en charge de telles requêtes car il est compatible avec SQL. Toutefois, n'exécutez pas d'analyses de tables pour des cas d'utilisation en production dans QLDB. Les analyses de tables peuvent entraîner des problèmes de performances sur des tables de grande taille, notamment des conflits de simultanéité et des délais de transaction.

Pour éviter de scanner des tables, vous devez exécuter des instructions avec une clause deWHERE prédicat à l'aide d'un opérateur d'égalité sur un champ indexé ou un identifiant de document, par exemple,WHERE indexedField = 123 ouWHERE indexedField IN (456, 789). Pour plus d'informations, veuillez consulter Optimisation des performances des données.

Les requêtes suivantes affichent les résultats des documents d'immatriculation du véhicule que vous avez précédemment insérésCréation de tableaux avec index et insertion de documents. L'ordre des résultats n'est pas spécifique et peut varier pour chaqueSELECT requête. Vous ne devez pas vous fier à l'ordre des résultats pour aucune requête dans QLDB.

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" }
Important

Dans PartiQL, vous utilisez des guillemets simples pour désigner des chaînes en langage de manipulation de données (DML) ou dans des instructions de requête. Mais la console QLDB et le shell QLDB renvoient les résultats des requêtes au format texte Amazon Ion. Vous pouvez donc voir des chaînes entre guillemets doubles.

Cette syntaxe permet au langage de requête PartiQL de maintenir la compatibilité SQL et au format de texte Amazon Ion de maintenir la compatibilité JSON.

Projections et filtres

Vous pouvez faire des projections (cibléesSELECT) et d'autres filtres standard (WHEREclauses). La requête suivante renvoie un sous-ensemble de champs de document à partir de laVehicleRegistration table. Il filtre les véhicules répondant aux critères suivants :

  • Filtre de chaîne — Il est enregistré à Seattle.

  • Filtre décimal : le montant du ticket de pénalité en attente est inférieur à100.0.

  • Filtre par date : sa date d'enregistrement est valide à compter du 4 septembre 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" }] } }

Jointures

Vous pouvez également écrire des requêtes de jointure internes. L'exemple suivant montre une requête de jointure interne implicite qui renvoie tous les documents d'immatriculation ainsi que les attributs des véhicules immatriculés.

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" }

Vous pouvez également écrire la même requête de jointure interne dans la syntaxe explicite suivante.

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

Données imbriquées

Vous pouvez utiliser PartiQL dans QLDB pour interroger des données imbriquées dans des documents. L'exemple suivant montre une sous-requête corrélée qui aplatit les données imbriquées. Le@ personnage est ici techniquement facultatif. Mais cela indique explicitement que vous souhaitez que laOwners structure soit intégréeVehicleRegistration, et non qu'une collection différente soit nomméeOwners (s'il en existe une).

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: [] }

Ce qui suit montre une sous-requête de laSELECT liste qui projette des données imbriquées, en plus d'une jointure interne.

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 requête suivante renvoie le numéro d'indexPersonId et (ordinal) de chaque personne figurant dans laOwners.SecondaryOwners liste d'unVehicleRegistration document.

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
}

Pour savoir comment interroger les métadonnées de vos documents, passez àInterroger les métadonnées d'un document.