Commande SELECT dans Amazon QLDB - 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.

Commande SELECT dans Amazon QLDB

Dans Amazon QLDB, utilisez laSELECT commande pour récupérer les données d'une ou de plusieurs tables. ChaqueSELECT requête dans QLDB est traitée dans le cadre d'une transaction et est soumise à un délai d'expiration de transaction.

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.

Pour savoir comment contrôler l'accès afin d'exécuter cette commande PartiQL sur des tables spécifiques, consultezCommencer à utiliser le mode d'autorisation standard dans Amazon QLDB.

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.

Syntaxe

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

Paramètres

VALUE

Un qualificatif pour votre expression qui oblige la requête à renvoyer la valeur du type de données brut, plutôt que la valeur encapsulée dans une structure de tuple.

expression

Projection formée à partir du* caractère générique ou d'une liste de projection d'un ou de plusieurs champs de documents de l'ensemble de résultats. Une expression peut être constituée d'appels à Références Références Références de PartiQL ou de champs modifiés par Opérateurs PartiQL.

AS field_alias

(Facultatif) Alias temporaire défini par l'utilisateur pour le champ utilisé dans le jeu de résultats final. LeAS mot-clé est facultatif.

Si vous ne spécifiez pas d'alias pour une expression qui n'est pas un simple nom de champ, le jeu de résultats applique un nom par défaut à ce champ.

À PARTIR DE LA SOURCE

Une source à interroger. Les seules sources actuellement prises en charge sont les noms de tables, les jointures internes entre les tables, lesSELECT requêtes imbriquées (soumises àLimites des requêtes imbriquées) et les appels de fonctions d'historique pour une table.

Vous devez spécifier au moins une source. Les sources multiples doivent être séparées par des virgules.

En tant que source_alias

(Facultatif) Alias défini par l'utilisateur qui couvre la source à interroger. Tous les alias de source utilisés dans laWHERE clauseSELECT OR doivent être déclarés dans laFROM clause. LeAS mot-clé est facultatif.

AT idx_alias

(Facultatif) Alias défini par l'utilisateur qui se lie au numéro d'index (ordinal) de chaque élément d'une liste provenant de la source. L'alias doit être déclaré dans laFROM clause à l'aide duAT mot clé.

PAR id_alias

(Facultatif) Alias défini par l'utilisateur qui se lie au champ deid métadonnées de chaque document du jeu de résultats. L'alias doit être déclaré dans laFROM clause à l'aide duBY mot clé. Cela est utile lorsque vous souhaitez projeter ou filtrer l'ID du document tout en interrogeant la vue utilisateur par défaut. Pour plus d'informations, veuillez consulter Utilisation de la clause BY pour interroger l'ID du document.

WHERE condition

Les critères de sélection et les critères de jointure (le cas échéant) pour la requête.

Note

Si vous omettez laWHERE clause, tous les documents de la table sont extraits.

Jointures

Seules les jointures internes sont actuellement prises en charge. Vous pouvez écrire des requêtes de jointure internes à l'aide de laINNER JOIN clause explicite, comme suit. Dans cette syntaxe,JOIN doit être associé àON, et leINNER mot clé est facultatif.

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

Vous pouvez également écrire des jointures internes en utilisant la syntaxe implicite, comme suit.

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

Limites des requêtes imbriquées

Vous pouvez écrire des requêtes imbriquées (sous-requêtes) dans desSELECT expressions et dansFROM des sources. La principale restriction est que seule la requête la plus externe peut accéder à l'environnement de base de données global. Par exemple, supposons que vous ayez un registre avec des tablesVehicleRegistration etPerson. La requête imbriquée suivante n'est pas valide car l'interneSELECT essaie d'y accéderPerson.

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

Alors que la requête imbriquée suivante est valide.

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

Exemples

La requête suivante affiche un caractèreSELECT générique de base avec une clause deWHERE prédicat standard qui utilise l'INopérateur.

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

Ce qui suit montreSELECT les projections avec un filtre de chaîne.

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

Ce qui suit montre une sous-requête corrélée qui aplatit les données imbriquées. Notez que le@ caractère est techniquement facultatif ici. Mais cela indique explicitement que vous souhaitez que laOwners structure y soit imbriquéeVehicleRegistration, et non qu'une collection différente soit nomméeOwners (s'il en existe une). Pour plus de contexte, consultezDonnées imbriquées le chapitre Utilisation des données et de l'historique.

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

Ce qui suit montre une sous-requête de laSELECT liste qui projette des données imbriquées et une jointure interne implicite.

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')

Ce qui suit montre une jointure interne explicite.

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')

Ce qui suit montre une projection du champ deid métadonnées du document, à l'aide de laBY clause.

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

Ce qui suit utilise laBY clause pour joindre lesPerson tablesDriversLicense et respectivement dans leurs champsPersonId etid dans les champs du document.

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

Ce qui suit utilise lePoint de vue engagé pour joindre lesPerson tablesDriversLicense et respectivementid dans leurs champsPersonId et ceux du document.

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

Ce qui suit renvoie le numéro d'index (ordinal)PersonId et le numéro d'index (ordinal) de chaque personne de laOwners.SecondaryOwners liste pour un document dans le tableauVehicleRegistration.

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

Exécution par programmation à l'aide du pilote

Pour savoir comment exécuter cette instruction par programmation à l'aide du pilote QLDB, consultez les didacticiels suivants dans la section Prise en main du pilote :