

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.

# Paginieren von Tabellenabfrageergebnissen in DynamoDB
<a name="Query.Pagination"></a>

DynamoDB *paginiert* die Ergebnisse von `Query`-Operationen. Bei der Paginierung werden die `Query`-Ergebnisse in „Seiten“ mit Daten von einer Größe von 1 MB (oder weniger) unterteilt. Eine Anwendung kann die erste Ergebnisseite verarbeiten, dann die zweite Seite und so weiter.

Eine einzelne `Query` gibt nur einen Ergebnissatz zurück, der innerhalb des Grenzwerts von 1 MB liegt. Um zu bestimmen, ob es mehr Ergebnisse gibt, und diese seitenweise abzurufen, sollte eine Anwendung die folgenden Schritte ausführen: 

1. Überprüfen Sie das `Query`-Low-Level-Ergebnis:
   + Wenn das Ergebnis ein `LastEvaluatedKey`-Element enthält und es ist ungleich null, fahren Sie mit Schritt 2 fort.
   + Wenn im Ergebnis *kein* `LastEvaluatedKey` vorhanden ist, sind keine Elemente mehr zum Abrufen vorhanden.

1. Erstellen Sie eine `Query` mit demselben `KeyConditionExpression`. Verwenden Sie jedoch dieses Mal den `LastEvaluatedKey`-Wert aus Schritt 1 als `ExclusiveStartKey`-Parameter in der neuen `Query`-Anforderung.

1. Führen Sie die neue `Query`-Anforderung aus.

1. Fahren Sie mit Schritt 1 fort.

Mit anderen Worten: Der `LastEvaluatedKey` einer `Query`-Antwort sollte als `ExclusiveStartKey` für die nächste `Query`-Anforderung verwendet werden. Wenn in einer `LastEvaluatedKey`-Antwort kein `Query`-Element vorhanden ist, haben Sie die letzte Ergebnisseite abgerufen. Wenn `LastEvaluatedKey` nicht leer ist, bedeutet dies nicht notwendigerweise, dass die Ergebnismenge mehr Daten enthält. Die einzige Möglichkeit zu erfahren, dass das Ende des Ergebnissatzes erreicht wurde, ist, dass `LastEvaluatedKey` leer ist.

Ein Wert, der nicht leer ist, bedeutet `LastEvaluatedKey` nur, dass die vorherige Seite an einer Seitengrenze (1 MB Seitengrößenbeschränkung oder einem `Limit` Wert) `Query` aufgehört hat, nicht, dass unbedingt mehr übereinstimmende Elemente übrig bleiben. Insbesondere, wenn Sie a verwenden`FilterExpression`, `Query` wendet die Obergrenze von 1 MB pro `Limit` Seite auf die gelesenen Elemente an, * bevor der Filter * angewendet wird. Eine Seite kann also null übereinstimmende Elemente zurückgeben und trotzdem einen enthalten. `LastEvaluatedKey` Stellen Sie so lange Anfragen mit den zurückgegebenen Anfragen, `LastEvaluatedKey` bis die Antwort keine mehr enthält.

Sie können das verwenden AWS CLI , um dieses Verhalten zu sehen. Der AWS CLI sendet wiederholt `Query` Low-Level-Anfragen an DynamoDB, bis sie `LastEvaluatedKey` nicht mehr in den Ergebnissen enthalten sind. Betrachten Sie das folgende AWS CLI Beispiel, das Filmtitel aus einem bestimmten Jahr abruft.

```
aws dynamodb query --table-name Movies \
    --projection-expression "title" \
    --key-condition-expression "#y = :yyyy" \
    --expression-attribute-names '{"#y":"year"}' \
    --expression-attribute-values '{":yyyy":{"N":"1993"}}' \
    --page-size 5 \
    --debug
```

Normalerweise AWS CLI verarbeitet das die Paginierung automatisch. In diesem Beispiel begrenzt der AWS CLI `--page-size` Parameter jedoch die Anzahl der Elemente pro Seite. Der `--debug`-Parameter gibt Low-Level-Informationen zu Anforderungen und Antworten aus.

**Anmerkung**  
Automatische Paginierung ist das Standardverhalten sowohl in AWS CLI Version 1 als auch in Version 2, sodass ein einziger Befehl alle übereinstimmenden Elemente zurückgibt. Wenn Sie stattdessen selbst paginieren müssen, verwenden Sie die `--no-paginate` Option, um nur die erste Seite zurückzugeben (die Antwort schließt dann ein, `LastEvaluatedKey` wenn noch mehr Elemente übrig sind), oder verwenden Sie, `--max-items` um die Anzahl der zurückgegebenen Elemente zu begrenzen und einen `NextToken` Wert für das Abrufen der nächsten Seite abzurufen.

Wenn Sie das Beispiel ausführen, sieht die erste Antwort von DynamoDB ungefähr folgendermaßen aus.

```
2017-07-07 11:13:15,603 - MainThread - botocore.parsers - DEBUG - Response body:
b'{"Count":5,"Items":[{"title":{"S":"A Bronx Tale"}},
{"title":{"S":"A Perfect World"}},{"title":{"S":"Addams Family Values"}},
{"title":{"S":"Alive"}},{"title":{"S":"Benny & Joon"}}],
"LastEvaluatedKey":{"year":{"N":"1993"},"title":{"S":"Benny & Joon"}},
"ScannedCount":5}'
```

Der `LastEvaluatedKey` in der Antwort gibt an, dass nicht alle Elemente abgerufen wurden. Der sendet AWS CLI dann eine weitere `Query` Anfrage an DynamoDB. Dieses Anforderungs- und Antwortmuster wird bis zur endgültigen Antwort fortgesetzt.

```
2017-07-07 11:13:16,291 - MainThread - botocore.parsers - DEBUG - Response body:
b'{"Count":1,"Items":[{"title":{"S":"What\'s Eating Gilbert Grape"}}],"ScannedCount":1}'
```

Das Fehlen von `LastEvaluatedKey` gibt an, dass keine abrufbaren Elemente mehr vorhanden sind.

**Anmerkung**  
Die AWS SDKs verarbeiten die DynamoDB-Antworten auf niedriger Ebene (einschließlich des Vorhandenseins oder Fehlens von`LastEvaluatedKey`) und bieten verschiedene Abstraktionen für die Paginierung der Ergebnisse. `Query` Beispielsweise stellt SDK für die Java-Dokumentschnittstelle `java.util.Iterator`-Unterstützung bereit, sodass Sie die Ergebnisse nacheinander durchgehen können.  
Codebeispiele in verschiedenen Programmiersprachen finden Sie im [Amazon-DynamoDB-Handbuch für erste Schritte](https://docs.aws.amazon.com/amazondynamodb/latest/gettingstartedguide/) und in der AWS SDK-Dokumentation für Ihre Sprache.

Sie können die Seitengröße auch reduzieren, indem Sie die Anzahl der Elemente in der Ergebnismenge mit dem `Limit`-Parameter der`Query`-Operation verwenden.

Weitere Informationen zur Verwendung der Abfrage mit DynamoDB finden Sie unter [Abfragen von Tabellen in DynamoDB](Query.md).