Ion mit PartiQL in Amazon QLDB abfragen - Amazon Quantum Ledger Database (Amazon QLDB)

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.

Ion mit PartiQL in Amazon QLDB abfragen

Wenn Sie Daten in Amazon QLDB abfragen, schreiben Sie Anweisungen im PartiQL-Format, aber QLDB gibt Ergebnisse im Amazon Ion-Format zurück. PartiQL soll SQL-kompatibel sein. Ion ist eine Erweiterung von JSON. Dies führt zu syntaktischen Unterschieden zwischen der Art und Weise, wie Sie Daten in Ihren Abfrageanweisungen notieren, und der Darstellung Ihrer Abfrageergebnisse.

In diesem Abschnitt werden die grundlegende Syntax und Semantik für die manuelle Ausführung von PartiQL-Anweisungen mithilfe der QLDB-Konsole 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. Das 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 Buchnamen — 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 DML-Anweisung mit einfachen Anführungszeichen bezeichnen. 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

Befolgen Sie gegebenenfalls die SQL-Syntax, wie im Abschnitt Partielle Ionentypzuordnung beschrieben. Beispiel:

  • 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. In QLDB kann man sich einen Tisch als 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, selbst wenn sie denselben Text haben, nicht gleichwertig sind. Die folgenden PartiQL-Ausdrücke werden beispielsweise zu verschiedenen Ion-Werten ausgewertet.

'foo'
`foo`

Pfadnavigation

Beim Schreiben von Data Manipulation Language(DML)-Anweisungen oder Abfrageanweisungen können Sie mithilfe von Pfadschritten auf Felder in verschachtelten 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 Schemas. 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.