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.
Verwenden Sie die SELECT
-Anweisung zum Abrufen von Daten aus einer Tabelle in Amazon DynamoDB.
Die Verwendung der SELECT
Anweisung kann zu einem vollständigen Tabellenscan führen, wenn die WHERE-Klausel keine Gleichheits- oder IN-Bedingung mit einem Partitionsschlüssel enthält. Die Scan-Operation untersucht jedes Element auf die angeforderten Werte und kann den bereitgestellten Durchsatz für eine große Tabelle oder Index in einer einzigen Operation verbrauchen.
Wenn Sie den vollständigen Tabellenscan in PartiQL vermeiden möchten, können Sie:
-
Erstellen Sie Ihre
SELECT
-Anweisungen so, dass keine vollständigen Tabellenscans durchgeführt werden, indem Sie sicherstellen, dass die Bedingung der WHERE-Klausel entsprechend konfiguriert ist. -
Deaktivieren Sie vollständige Tabellenscans mithilfe der IAM-Richtlinie, die unter Beispiel: In PartiQL für DynamoDB Select-Anweisungen erlauben und vollständige Tabellenscan-Anweisungen verweigern im DynamoDB-Entwicklerhandbuch.
Weitere Informationen finden Sie unter Bewährte Methoden für das Abfragen und Scannen von Daten im DynamoDB-Entwicklerhandbuch.
Syntax
SELECT
expression
[, ...] FROMtable
[.index
] [ WHEREcondition
] [ [ORDER BYkey
[DESC|ASC] , ...]
Parameter
expression
-
(erforderlich) Eine Projektion aus dem
*
-Platzhalter oder eine Projektionsliste aus einem oder mehreren Attributnamen oder Dokumentpfaden aus dem Ergebnissatz. Ein Ausdruck kann aus Aufrufen an PartiQL-Funktionen mit DynamoDB verwenden oder Feldern bestehen, die von PartiQL-Arithmetik-, Vergleichs- und logische Operatoren für DynamoDB geändert werden. table
-
(Erforderlich) Der abzufragende Tabellenname.
index
-
(Optional) Der Name des abzufragenden Indexes.
Anmerkung
Sie müssen dem Tabellennamen und dem Indexnamen doppelte Anführungszeichen hinzufügen, wenn Sie einen Index abfragen.
SELECT * FROM "TableName"."IndexName"
condition
-
(Optional) Die Auswahlkriterien für die Abfrage.
Wichtig
Um sicherzustellen, dass eine
SELECT
-Anweisung nicht zu einem vollständigen Tabellenscan führt, muss dieWHERE
-Klauselbedingung einen Partitionsschlüssel angeben. Verwenden Sie den Gleichheits- oder IN-Operator.Angenommen, Sie haben eine
Orders
-Tabelle mitOrderID
-Partitionsschlüssel und andere Nicht-Schlüsselattribute, einschließlich einesAddress
, würden die folgenden Anweisungen nicht zu einem vollständigen Tabellenscan führen:SELECT * FROM "Orders" WHERE OrderID = 100 SELECT * FROM "Orders" WHERE OrderID = 100 and Address='some address' SELECT * FROM "Orders" WHERE OrderID = 100 or OrderID = 200 SELECT * FROM "Orders" WHERE OrderID IN [100, 300, 234]
Folgende
SELECT
-Anweisungen führen jedoch zu einem vollständigen Tabellenscan:SELECT * FROM "Orders" WHERE OrderID > 1 SELECT * FROM "Orders" WHERE Address='some address' SELECT * FROM "Orders" WHERE OrderID = 100 OR Address='some address'
key
-
(Optional) Ein Hash-Schlüssel oder ein Sortierschlüssel, der zum Sortieren von ausgegebenen Ergebnissen verwendet werden soll. Die Standardreihenfolge ist aufsteigend (
ASC
) Geben Sie an.DESC
, wenn die Ergebnisse in absteigender Reihenfolge neu abgestimmt werden sollen.
Anmerkung
Wenn Sie die WHERE
-Klausel weglassen, werden alle Elemente in der Tabelle abgerufen.
Beispiele
Die folgende Abfrage gibt ein Element, falls vorhanden, aus der Orders
-Tabelle zurück, indem der Partitionsschlüssel OrderID
angegeben und der Gleichheitsoperator verwendet wird.
SELECT OrderID, Total
FROM "Orders"
WHERE OrderID = 1
Die folgende Abfrage gibt alle Elemente in der Orders
-Tabelle mit einem bestimmten Partitionsschlüssel OrderID
zurück, mithilde von Werten mit dem Operator OR.
SELECT OrderID, Total
FROM "Orders"
WHERE OrderID = 1 OR OrderID = 2
Die folgende Abfrage gibt alle Elemente in der Orders
-Tabelle mit einem bestimmten Partitionsschlüssel OrderID
zurück, mithilde von Werten mit dem Operator IN. Die zurückgegebenen Ergebnisse sind in absteigender Reihenfolge, basierend auf dem OrderID
-Attributwert.
SELECT OrderID, Total
FROM "Orders"
WHERE OrderID IN [1, 2, 3] ORDER BY OrderID DESC
Die folgende Abfrage zeigt einen vollständigen Tabellenscan, der alle Elemente aus der Orders
-Tabelle zurückgibt, deren Total
größer als 500 ist, wobei Total
ein Nicht-Schlüsselattribut ist.
SELECT OrderID, Total
FROM "Orders"
WHERE Total > 500
Die folgende Abfrage zeigt einen vollständigen Tabellenscan, der alle Elemente aus der Orders
-Tabelle innerhalb eines bestimmten Total
-Reihenfolgebereichs zurückgibt, wobei der IN-Operator und ein Nicht-Schlüsselattribut Total
verwendet werden.
SELECT OrderID, Total
FROM "Orders"
WHERE Total IN [500, 600]
Die folgende Abfrage zeigt einen vollständigen Tabellenscan, der alle Elemente aus der Orders
-Tabelle innerhalb eines bestimmten Total
-Reihenfolgebereichs zurückgibt, wobei der BETWEEN-Operator und ein Nicht-Schlüsselattribut Total
verwendet werden.
SELECT OrderID, Total
FROM "Orders"
WHERE Total BETWEEN 500 AND 600
Die folgende Abfrage gibt das erste Datum zurück, an dem ein Firestick-Gerät zum Überwachen verwendet wurde, indem der CustomerID
-Partitionsschlüssel und der MovieID
-Sortierschlüssel in der Bedingung der WHERE-Klausel angegeben und Dokumentpfade in der SELECT-Klausel verwendet werden.
SELECT Devices.FireStick.DateWatched[0]
FROM WatchList
WHERE CustomerID= 'C1' AND MovieID= 'M1'
Die folgende Abfrage zeigt einen vollständigen Tabellenscan, der die Liste der Elemente zurückgibt, bei denen ein Firestick-Gerät nach dem 24.12.19 zum ersten Mal unter Verwendung von Dokumentpfaden in der WHERE-Klausel Bedingung verwendet wurde.
SELECT Devices
FROM WatchList
WHERE Devices.FireStick.DateWatched[0] >= '12/24/19'