Abfragen von Ion mit PartiQL in Amazon QLDB - Amazon Quantum Ledger-Datenbank (AmazonQLDB)

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Abfragen von Ion mit PartiQL in Amazon QLDB

Wichtig

Hinweis zum Ende des Supports: Bestandskunden können Amazon QLDB bis zum Ende des Supports am 31.07.2025 nutzen. Weitere Informationen finden Sie unter Migrieren eines Amazon QLDB Ledgers zu Amazon Aurora SQL Postgre.

Wenn Sie Daten in Amazon abfragenQLDB, schreiben Sie Anweisungen im PartiQL-Format, geben aber Ergebnisse im Amazon Ion-Format QLDB zurück. PartiQL soll SQL -kompatibel sein, während Ion eine Erweiterung von ist. JSON Dies führt zu syntaktischen Unterschieden zwischen der Art und Weise, wie Sie Daten in Ihren Abfrageanweisungen notieren, und der Art und Weise, wie Ihre Abfrageergebnisse angezeigt werden.

In diesem Abschnitt werden die grundlegende Syntax und Semantik für die manuelle Ausführung von PartiQL-Anweisungen mithilfe der QLDBKonsole oder der QLDB Shell beschrieben.

Tipp

Bei der programmgesteuerten Ausführung von PartiQL-Abfragen hat sich die Verwendung parametrisierte Anweisungen als bewährte Methode erwiesen. Sie können in Ihren Anweisungen ein Fragezeichen (?) als Platzhalter für Bind-Variablen verwenden, um diese Syntaxregeln zu vermeiden. Dies ist auch sicherer und effizienter.

Weitere Informationen finden Sie in den folgenden Tutorials unter Erste Schritte mit dem Treiber:

Syntax und Semantik

Wenn Sie die QLDB Konsole oder die QLDB Shell zum Abfragen von Ion-Daten verwenden, sind die grundlegenden Syntax und Semantik von PartiQL wie folgt aufgeführt:

Groß-/Kleinschreibung

Bei allen QLDB Systemobjektnamen — einschließlich Feldnamen, Tabellennamen und Hauptbuchnamen — wird zwischen Groß- und Kleinschreibung unterschieden.

Zeichenfolgenwerte

In Ion bezeichnen doppelte Anführungszeichen ("...") eine Zeichenfolge.

In PartiQL bezeichnen einfache Anführungszeichen ('...') eine Zeichenfolge.

Symbole und Bezeichner

In Ion bezeichnen einfache Anführungszeichen ('...') ein Symbol. Eine Teilmenge von Symbolen in Ion, die als Identifikatoren bezeichnet werden, wird durch Text ohne Anführungszeichen dargestellt.

In PartiQL bezeichnen doppelte Anführungszeichen ("...") einen PartiQL-Bezeichner in Anführungszeichen, z. B. ein reserviertes Wort, das als Tabellenname verwendet wird. Text ohne Anführungszeichen steht für einen regulären PartiQL-Bezeichner, z. B. einen Tabellennamen, der kein reserviertes Wort ist.

Ion-Literale

Alle Ion-Literale können mit umgekehrten Anführungszeichen (`...`) in einer PartiQL-Anweisung bezeichnet werden.

Feldnamen

Bei Ion-Feldnamen wird die Groß-/Kleinschreibung beachtet. Mit PartiQL können Sie Feldnamen in einer Anweisung mit einfachen Anführungszeichen kennzeichnen. DML Dies ist eine Kurzbezeichnung zur Verwendung der cast-Funktion von PartiQL zur Definition eines Symbols. Es ist auch intuitiver als die Verwendung von Backticks, um ein wörtliches Ionensymbol zu bezeichnen.

Literale

Literale der PartiQL-Abfragesprache entsprechen den Ion-Datentypen wie folgt:

Skalare

Folgen Sie gegebenenfalls der SQL Syntax, wie im Abschnitt beschrieben. Zuordnung des partiellen Ionentyps Beispielsweise:

  • 5

  • 'foo'

  • null

Structs

Auch bekannt als „Tupel“ oder Objekte in vielen Formaten und anderen Datenmodellen.

Bezeichnet durch geschweifte Klammern ( {...} ) mit struct-Elementen, die durch Kommata getrennt sind.

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

Listen

Auch als „Arrays“ bezeichnet.

Bezeichnet durch eckige Klammern ( [...] ) mit durch Kommata getrennten Listenelementen.

  • [ 1, 'foo' ]

Taschen

Ungeordnete Sammlungen in PartiQL.

Bezeichnet durch doppelte eckige Klammern ( <<...>> ) mit durch Kommata getrennten Taschenelementen. QLDBIn kann man sich einen Tisch wie eine Tasche vorstellen. Eine Tasche kann jedoch nicht in Dokumente in einer Tabelle verschachtelt werden.

  • << 1, 'foo' >>

Beispiel

Hier sehen Sie ein Beispiel für die Verwendung der Syntax für eine INSERT-Anweisung mit verschiedenen Ion-Typen.

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

Backtick-Notation

PartiQL deckt alle Ion-Datentypen vollständig ab, sodass Sie jede Anweisung ohne Backticks schreiben können. Es gibt jedoch Fälle, in denen diese Ion-Literalsyntax Ihre Anweisungen klarer und prägnanter machen kann.

Um beispielsweise ein Dokument mit Ion-Zeitstempel- und Symbolwerten einzufügen, können Sie die folgende Anweisung nur mit der reinen PartiQL-Syntax schreiben.

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

Dies ist ziemlich ausführlich, sodass Sie stattdessen Backticks verwenden können, um Ihre Anweisung zu vereinfachen.

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

Sie können auch die gesamte Struktur in Backticks einschließen, um einige weitere Tastatureingaben zu sparen.

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

Zeichenfolgen und Symbole sind unterschiedliche Klassen in PartiQL. Das bedeutet, dass sie nicht identisch sind, auch wenn sie denselben Text haben. Die folgenden PartiQL-Ausdrücke werden beispielsweise zu verschiedenen Ion-Werten ausgewertet.

'foo'
`foo`

Pfadnavigation

Beim Schreiben von Datenmanipulationssprache (DML) oder Abfrageanweisungen können Sie mithilfe von Pfadschritten auf Felder innerhalb verschachtelter Strukturen zugreifen. PartiQL unterstützt die Punktschreibweise für den Zugriff auf Feldnamen einer übergeordneten Struktur. Im folgenden Beispiel wird auf das Model-Feld eines übergeordneten Elements Vehicle zugegriffen.

Vehicle.Model

Zum Zugriff auf ein bestimmtes Element einer Liste können Sie den Operator Eckige Klammern verwenden, um eine Nicht null-basierte Ordnungszahl anzugeben. Im folgenden Beispiel wird auf das Element SecondaryOwners mit der Ordnungszahl 2 zugegriffen. Mit anderen Worten: Dies ist das dritte Element in der Liste.

SecondaryOwners[2]

Aliasing

QLDB unterstützt offene Inhalte und Schemata. Wenn Sie also auf bestimmte Felder in einer Anweisung zugreifen, können Sie am besten sicherstellen, dass Sie die erwarteten Ergebnisse erhalten, indem Sie Aliase verwenden. Zum Beispiel: Wenn Sie keinen expliziten Alias angeben, generiert das System einen impliziten Alias für Ihre FROM-Quellen.

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

Aber die Ergebnisse sind aufgrund von Feldnamenkonflikten unvorhersehbar für Feldnamen. Wenn ein anderes Feld mit dem Namen VIN in einer verschachtelten Struktur innerhalb der Dokumente existiert, können die von dieser Abfrage zurückgegebenen VIN-Werte überraschend sein. Eine bewährte Methode ist die folgende Anweisung. Diese Abfrage deklariert v als Alias über der Vehicle-Tabelle. Das AS-Schlüsselwort ist optional.

SELECT v.VIN FROM Vehicle [ AS ] v

Aliasing ist besonders nützlich für Pfade in verschachtelten Sammlungen innerhalb eines Dokuments. Mit der folgenden Anweisung wird beispielsweise o als Alias über der Sammlung VehicleRegistration.Owners deklariert.

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

Das Zeichen @ ist hier technisch optional. Es gibt jedoch explizit an, dass Sie die Owners-Struktur innerhalb von VehicleRegistration haben möchten, und nicht eine andere Sammlung mit dem Namen Owners (sofern vorhanden).

PartiQL-Spezifikation

Weitere Informationen zur PartiQL-Abfragesprache finden Sie unter PartiQL-Spezifikation.