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.
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:
-
Gehe zu: Schnellstart-Tutorial | Referenz zum Kochbuch
-
Node.js: Schnellstart-Tutorial | Referenz zum Kochbuch
-
Python: Schnellstart-Tutorial | Referenz zum Kochbuch
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 (
{...}
) mitstruct
-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