SELECTcommande dans Amazon QLDB - Base de données Amazon Quantum Ledger (AmazonQLDB)

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.

SELECTcommande dans Amazon QLDB

Important

Avis de fin de support : les clients existants pourront utiliser Amazon QLDB jusqu'à la fin du support le 31 juillet 2025. Pour plus de détails, consultez Migrer un Amazon QLDB Ledger vers Amazon Aurora SQL Postgre.

Dans AmazonQLDB, utilisez la SELECT commande pour récupérer les données d'une ou de plusieurs tables. Chaque SELECT requête 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 chaque SELECT requête. Vous ne devez pas vous fier à l'ordre des résultats pour les requêtes dansQLDB.

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

Avertissement

Lorsque vous exécutez une requête 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 SQL compatible. Cependant, n'exécutez pas d'analyses de tables pour les cas d'utilisation en production dansQLDB. L'analyse des tables peut entraîner des problèmes de performance sur les tables de grande taille, notamment des conflits de simultanéité et des délais d'expiration des transactions.

Pour éviter de scanner des tables, vous devez exécuter des instructions contenant une clause de WHERE prédicat à l'aide d'un opérateur d'égalité sur un champ indexé ou un identifiant de document ; par exemple, WHERE indexedField = 123 ou. WHERE indexedField IN (456, 789) Pour plus d’informations, consultez Optimisation des performances des requêtes.

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 brutes, plutôt que la valeur soit encapsulée dans une structure de tuple.

expression

Projection formée à partir du * caractère générique ou liste de projections d'un ou de plusieurs champs de document issus du jeu de résultats. Une expression peut être constituée d'appels à Fonctions 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. Le AS 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.

FROM source

Source à interroger. Les seules sources actuellement prises en charge sont les noms de tables, les jointures internes entre les tables, les SELECT requêtes imbriquées (sous réserve deLimitations 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.

AS source_alias

(Facultatif) Alias défini par l'utilisateur qui s'étend sur une source à interroger. Tous les alias de source utilisés dans la WHERE clause SELECT OR doivent être déclarés dans la FROM clause. Le AS 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 depuis la source. L'alias doit être déclaré dans la FROM clause à l'aide du AT mot clé.

BY id_alias

(Facultatif) Alias défini par l'utilisateur qui est lié au champ de id métadonnées de chaque document du jeu de résultats. L'alias doit être déclaré dans la FROM clause à l'aide du BY mot clé. Cela est utile lorsque vous souhaitez projeter ou filtrer sur l'ID du document tout en interrogeant la vue utilisateur par défaut. Pour plus d’informations, consultez Utilisation de la clause BY pour demander 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 la WHERE clause, tous les documents du tableau sont récupérés.

Jointures

Seules les jointures internes sont actuellement prises en charge. Vous pouvez écrire des requêtes de jointure internes à l'aide de la INNER JOIN clause explicite, comme suit. Dans cette syntaxe, JOIN doit être associé àON, et le INNER 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

Limitations des requêtes imbriquées

Vous pouvez écrire des requêtes imbriquées (sous-requêtes) dans des SELECT expressions et dans FROM 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. Supposons, par exemple, que vous disposiez d'un registre contenant des tables VehicleRegistration etPerson. La requête imbriquée suivante n'est pas valide car l'utilisateur interne SELECT 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 montre un caractère générique SELECT entièrement générique de base avec une clause de WHERE prédicat standard qui utilise l'INopérateur.

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

Ce qui suit montre SELECT 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 voulez la Owners structure qui y est imbriquéeVehicleRegistration, et non une collection différente nommée Owners (s'il en existait une). Pour plus de contexte, voir Donné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 la SELECT liste qui projette des données imbriquées, ainsi qu'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 de id métadonnées du document, à l'aide de la BY clause.

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

Ce qui suit utilise la BY clause pour joindre les Person tables DriversLicense et dans leurs champs PersonId et id dans les champs du document, respectivement.

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

Ce qui suit utilise le Un point de vue engagé pour joindre les Person tables DriversLicense et dans leurs champs PersonId et dans les id champs du document, respectivement.

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 de chaque personne de la Owners.SecondaryOwners liste pour un document dans une tableVehicleRegistration.

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 QLDB pilote, consultez les didacticiels suivants dans Getting started with the driver :