DynamoDB-Filterausdrücke: Alles, was Sie wissen müssen

Dynamodb Filterausdrucke Alles Was Sie Wissen Mussen



Filterausdrücke werden in der No-SQL-DynamoDB-Funktion wie WHERE-Klauseln verwendet, die in SQL-Datenbanken üblich sind. Da DynamoDB jedoch eine No-SQL-Datenbank ist, verhalten sich Filterausdrücke aufgrund der Art und Struktur von No-SQL-Datenbanken ganz anders als WHERE-Klauseln.

Dieser Artikel konzentriert sich auf Filterausdrücke. Daher werden wir die Filterausdrücke definieren, erklären, warum und wann sie anwendbar sind, und anhand relevanter Beispiele eine Schritt-für-Schritt-Anleitung zu ihrer Verwendung bereitstellen.

Was sind Filterausdrücke?

Filterausdrücke sind eine beliebte Methode zum Filtern der Daten in DynamoDB während Abfrage- und Scanvorgängen. In DynamoDB beruhen die richtige Datenmodellierung und -organisation auf der Filterung. Während die meisten Anwendungen immer über Tonnen von gespeicherten Daten verfügen, benötigen Sie möglicherweise dringend einen Gegenstand aus dem riesigen Durcheinander.







Ihre Fähigkeit, bei Bedarf die richtigen Daten abzurufen, hängt von den Filterfunktionen Ihrer Datenbank ab, und hier helfen die Filterausdrücke. Sie geben die Ergebnisse innerhalb des Abfrageelements an, die Sie zurückgeben möchten, während sie die restlichen Elemente verwerfen.



Sie können die Filterausdrücke auf die serverseitigen Filter auf Elementattribute anwenden, nachdem ein Abfragevorgang abgeschlossen ist, aber bevor der Server die Ergebnisse Ihres Abfrageaufrufs zurückgibt. Dies impliziert, dass Ihre Abfrage immer noch die gleiche Menge an Lesekapazität verbraucht, unabhängig davon, ob Sie einen Filterausdruck verwenden.



Außerdem tritt, wie bei gewöhnlichen Abfragevorgängen, Ihr Datenlimit von 1 MB für Abfragevorgänge vor der Auswertung Ihres Filterausdrucksvorgangs auf. Sie können diese Operation verwenden, um die Nutzlast zu reduzieren, nach bestimmten Elementen zu suchen und die Einfachheit und Lesbarkeit während der Anwendungsentwicklung zu verbessern.





Syntax und Beispiele für Filterausdrücke

Insbesondere verwenden sowohl Filterausdrücke als auch Schlüsselausdrücke dieselbe Syntax. Außerdem können Filterausdrücke und Bedingungsausdrücke dieselben Funktionen, Komparatoren und logischen Operatoren verwenden.

Zu den anderen Operatoren, die die Ausdrücke filtern können, gehören auch der Operator CONTAINS, der Operator OR, der Operator not-equals (), der Operator IN, der Operator BETWEEN, der Operator BEGINS_WITH, der Operator SIZE und der Operator EXISTS.



Beispiel 1: Abfragen mit AWS CLI und DynamoDB-Primärschlüsseln

Dieses Beispiel fragt die Musiktabelle nach einem bestimmten Genre (Partitionsschlüssel) und einem bestimmten Künstler (Sortierschlüssel) ab. Das Dienstprogramm liefert nur ein Ergebnis für die Elemente, die mit dem bestimmten Partitionsschlüssel und Sortierschlüssel für die Songs mit den meisten Aufrufen übereinstimmen.

Sie können die Anzahl der Ansichten (#v) im Befehl angeben. Beispielsweise markieren wir unser Mindestlimit mit 1.000 Aufrufen, um zu implizieren, dass nur die Ergebnisse für die Songs mit über 1.000 Aufrufen zurückgegeben werden.

$ aws dynamodb-Abfrage \
--Tabellenname Musik \
--key-condition-expression 'Genre = :fn und Künstler = :sub' \
--filter-ausdruck '#v >= :num(1000)' \
--Ausdrucksattributnamen '{'#v': 'Aufrufe'}' \
--Ausdrucksattributwerte Datei: // Werte.json

Beispiel 2: Verwenden von AWS CLI mit Bedingungsausdruck

Wir können dieselbe Abfrage wie im vorherigen Beispiel neu strukturieren, aber jetzt mit Bedingungsschlüsseln neben unseren Filtern. Der Sortierschlüssel ist nicht enthalten. Stattdessen werden alle Datensätze für den angegebenen Künstler mit mehr als 1.000 Aufrufen abgerufen. Es kann auch rekonstruiert werden, um Bestellungen über einer bestimmten Anzahl für einen bestimmten Benutzernamen (customer_id) bereitzustellen.

$ aws dynamodb-Abfrage \
--Tabellenname Musik \
--key-condition-expression 'Benutzername = :Benutzername' \
--filter-ausdruck 'Betrag > :Betrag' \
--Ausdrucksattributwerte '{
':Benutzername': { 'S': 'Künstler' },
':betrag': { 'N': '1000' }
}'
\
$LOCAL

Ein Beispiel für das Ergebnis sieht so aus:

Die Abbildung zeigt, dass von den 56 Songtiteln desselben Künstlers nur sieben Songs mehr als 1.000 Aufrufe haben. Wir haben die Abbildung jedoch aus Gründen der Kürze gekürzt und nur das erste und das letzte Ergebnis in die Liste aufgenommen.

Beispiel 3: Verwenden von Filterausdrücken mit dem No-Equal ()-Operator

Im folgenden Java-Dienstprogramm wollen wir unsere Tabelle (Movie Collection) nach allen Filmen abfragen, die nicht gleich „Movie X“ sind. Stellen Sie sicher, dass Sie einen Filterausdruck mit einem Attribut (#name) neben einem Ausdrucksattributwert (:name) verwenden, wie im Folgenden dargestellt:

const AWS = erfordern ( 'aws-sdk' ) ;
AWS.config.update ( { Region: 'eu-west-1' } ) ;
const dynamodb = neu AWS.DynamoDB.DocumentClient ( ) ;

var Parameter = {
Tabellenname: 'Filmsammlung' ,
Schlüsselbedingungsausdruck: '#PK = :PK' ,
Filterausdruck : '#Name Name' , ( Filterausdruck )
Ausdrucksattributnamen: { '#PK' : 'PK' , '#Name' : 'Name' } , ( Bedingungsausdruck )
Ausdrucksattributwerte: {
':PK' : 'OgejhHrdRS453HGD4Ht44' ,
':Name' : 'Film X'
}
} ;

dynamodb.query ( Parameter, Funktion ( äh, Daten ) {
wenn ( irren ) Konsole.log ( irren ) ;
anders Konsole.log ( Daten ) ;
} ) ;

Beispiel 4: Verwenden von Filterausdrücken mit dem Scan-Operator

Während der vorherige Befehl <> verwendet, um nur die Elemente abzurufen, die nicht gleich dem Filmnamen namens Movie X sind, stellen Sie sicher, dass Sie hier die Schlüsselbedingungsausdrücke zusammen mit dem Filterausdruck verwenden. Dies liegt daran, dass es unmöglich ist, die Daten im Abfrageoperator zu filtern, ohne einen Schlüsselbedingungsausdruck zu verwenden.

var Parameter = {
Tabellenname: 'Filmsammlung' ,
Filterausdruck : 'PK = :PK und #name  :name' ,
Ausdrucksattributnamen: { '#Name' : 'Name' } ,
Ausdrucksattributwerte: {
':PK' : 'OgejhHrdRS453HGD4Ht44' ,
':Name' : 'Film X'
}
} ;

dynamodb.scan ( Parameter, Funktion ( äh, Daten ) {
wenn ( irren ) Konsole.log ( irren ) ;
anders Konsole.log ( Daten ) ;
} ) ;

Fazit

Das ist das Ende unseres DynamoDB-Tutorials zu Filterausdrücken. Sie können die Filterausdrücke verwenden, um einen Satz bevorzugter Daten abzurufen, die abgerufenen Daten nach einem Scan oder einer Abfrage zu filtern oder einen Satz von Daten an einen Client zurückzugeben. Obwohl es mit einer Reihe von Tools anwendbar ist, gibt es Fälle, in denen die Verwendung der Filterausdrücke nicht möglich ist. Sie können sie beispielsweise nur verwenden, wenn Sie über ein geeignetes Datenmodell verfügen, wenn Sie einen Primärschlüssel verwenden und wenn Sie große Datenmengen extrahieren.