Interroger Ion avec PartiQL sur 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.

Interroger Ion avec PartiQL sur 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.

Lorsque vous interrogez des données dans AmazonQLDB, vous écrivez des instructions au format partiQL, mais vous QLDB renvoyez les résultats au format Amazon Ion. partiQL est destiné à être SQL compatible, alors que Ion est une extension de. JSON Cela entraîne des différences syntaxiques entre la façon dont vous notez les données dans vos instructions de requête et la façon dont les résultats de vos requêtes sont affichés.

Cette section décrit la syntaxe et la sémantique de base pour exécuter des instructions partiQL manuellement à l'aide de la QLDBconsole ou du shell. QLDB

Astuce

Lorsque vous exécutez des requêtes partiQL par programmation, la meilleure pratique consiste à utiliser des instructions paramétrées. Vous pouvez utiliser un point d'interrogation (?) comme espace réservé à une variable de liaison dans vos instructions pour éviter ces règles de syntaxe. Cela est également plus sûr et plus efficace.

Pour en savoir plus, consultez les didacticiels suivants dans Getting started with the driver :

Syntaxe et sémantique

Lorsque vous utilisez la QLDB console ou le QLDB shell pour interroger des données Ion, voici la syntaxe et la sémantique fondamentales de partiQL :

Sensibilité à la casse

Tous les noms QLDB d'objets du système, y compris les noms de champs, les noms de tables et les noms de registre, distinguent les majuscules et minuscules.

Valeurs de chaîne

Dans Ion, les guillemets doubles ("...") indiquent une chaîne.

Dans PartiQL, les guillemets simples ('...') désignent une chaîne.

Symboles et identifiants

Dans Ion, les guillemets simples ('...') désignent un symbole. Dans Ion, un sous-ensemble de symboles appelés identificateurs est représenté par du texte sans guillemets.

Dans PartiQL, les guillemets doubles ("...") indiquent un identifiant PartiQL entre guillemets, tel qu'un mot réservé utilisé comme nom de table. Le texte non entre guillemets représente un identifiant PartiQL normal, tel qu'un nom de table qui n'est pas un mot réservé.

Littéraux ioniques

Tous les littéraux Ion peuvent être désignés par backticks (`...`) dans une instruction PartiQL.

Noms de champ

Les noms des champs ioniques sont des symboles distinguant majuscules et minuscules. PartiQL vous permet de désigner les noms de champs par des guillemets simples dans une instruction. DML Il s'agit d'une alternative abrégée à l'utilisation de la cast fonction partiQL pour définir un symbole. C'est également plus intuitif que d'utiliser des backticks pour désigner un symbole ionique littéral.

Littéraux

Les littéraux du langage de requête partiQL correspondent aux types de données Ion, comme suit :

Scalaires

Suivez la SQL syntaxe le cas échéant, comme décrit dans Cartographie des types d'ions partiels la section. Par exemple :

  • 5

  • 'foo'

  • null

Structures

Également appelés tuples ou objets dans de nombreux formats et autres modèles de données.

Désigné par des accolades ({...}) avec des struct éléments séparés par des virgules.

  • { 'id' : 3, 'arr': [1, 2] }

Listes

Également connu sous le nom de tableaux.

Désigné par des crochets ([...]) avec des éléments de liste séparés par des virgules.

  • [ 1, 'foo' ]

Sacs

Collections non ordonnées dans PartiQL.

Désigné par des crochets à double angle (<<...>>), les éléments du sac étant séparés par des virgules. DansQLDB, une table peut être considérée comme un sac. Toutefois, un sac ne peut pas être imbriqué dans les documents d'un tableau.

  • << 1, 'foo' >>

Exemple

Voici un exemple de syntaxe d'une INSERT instruction comportant différents types d'ions.

INSERT INTO VehicleRegistration VALUE { 'VIN' : 'KM8SRDHF6EU074761', --string 'RegNum' : 1722, --integer 'State' : 'WA', 'City' : 'Kent', 'PendingPenaltyTicketAmount' : 130.75, --decimal 'Owners' : { --nested struct 'PrimaryOwner' : { 'PersonId': '294jJ3YUoH1IEEm8GSabOs' }, 'SecondaryOwners' : [ --list of structs { 'PersonId' : '1nmeDdLo3AhGswBtyM1eYh' }, { 'PersonId': 'IN7MvYtUjkp1GMZu0F6CG9' } ] }, 'ValidFromDate' : `2017-09-14T`, --Ion timestamp literal with day precision 'ValidToDate' : `2020-06-25T` }

Notation rétroactive

partiQL couvre entièrement tous les types de données Ion, vous pouvez donc écrire n'importe quelle instruction sans utiliser de backticks. Mais dans certains cas, cette syntaxe littérale d'Ion peut rendre vos déclarations plus claires et plus concises.

Par exemple, pour insérer un document contenant des valeurs d'horodatage et de symbole Ion, vous pouvez écrire l'instruction suivante en utilisant uniquement la syntaxe PartiQL.

INSERT INTO myTable VALUE { 'myTimestamp': to_timestamp('2019-09-04T'), 'mySymbol': cast('foo' as symbol) }

C'est assez verbeux, vous pouvez donc utiliser des backticks pour simplifier votre déclaration.

INSERT INTO myTable VALUE { 'myTimestamp': `2019-09-04T`, 'mySymbol': `foo` }

Vous pouvez également placer l'ensemble de la structure sous forme de backticks pour enregistrer quelques frappes supplémentaires.

INSERT INTO myTable VALUE `{ myTimestamp: 2019-09-04T, mySymbol: foo }`
Important

Les chaînes et les symboles sont des classes différentes dans partiQL. Cela signifie que même s'ils ont le même texte, ils ne sont pas égaux. Par exemple, les expressions partiQL suivantes sont évaluées selon différentes valeurs d'ion.

'foo'
`foo`

Navigation par chemin

Lorsque vous écrivez un langage de manipulation de données (DML) ou des instructions de requête, vous pouvez accéder aux champs des structures imbriquées en suivant des étapes de chemin. partiQL prend en charge la notation par points pour accéder aux noms de champs d'une structure parent. L'exemple suivant accède au Model champ d'un parentVehicle.

Vehicle.Model

Pour accéder à un élément spécifique d'une liste, vous pouvez utiliser l'opérateur entre crochets pour indiquer un nombre ordinal de base zéro. L'exemple suivant accède à l'élément de SecondaryOwners avec un nombre ordinal de. 2 En d'autres termes, il s'agit du troisième élément de la liste.

SecondaryOwners[2]

Aliasing

QLDBprend en charge le contenu et le schéma ouverts. Ainsi, lorsque vous accédez à des champs particuliers d'une instruction, le meilleur moyen de vous assurer d'obtenir les résultats escomptés est d'utiliser des alias. Par exemple, si vous ne spécifiez pas d'alias explicite, le système en génère un implicite pour vos FROM sources.

SELECT VIN FROM Vehicle --is rewritten to SELECT Vehicle.VIN FROM Vehicle AS Vehicle

Mais les résultats sont imprévisibles en cas de conflits de noms de champs. Si un autre champ nommé VIN existe dans une structure imbriquée au sein des documents, les VIN valeurs renvoyées par cette requête peuvent vous surprendre. Il est recommandé d'écrire plutôt la déclaration suivante. Cette requête est déclarée v sous la forme d'un alias qui s'étend au-dessus de la Vehicle table. Le AS mot clé est facultatif.

SELECT v.VIN FROM Vehicle [ AS ] v

L'aliasing est particulièrement utile pour accéder à des collections imbriquées au sein d'un document. Par exemple, l'instruction suivante est o déclarée comme un alias qui couvre la collectionVehicleRegistration.Owners.

SELECT o.SecondaryOwners FROM VehicleRegistration AS r, @r.Owners AS o

Le @ personnage est techniquement facultatif ici. Mais cela indique explicitement que vous voulez y inclure la Owners structureVehicleRegistration, et non une collection différente nommée Owners (s'il en existait une).

Spécification PartiQL

Pour plus d'informations sur le langage de requête partiQL, consultez la spécification partiQL.