翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
テーブルクエリ結果をページ分割する
DynamoDB では、Query
オペレーションの結果をページ割りします。ページ分割を行うことで Query
結果が 1 MB サイズ (またはそれ以下) のデータの「ページ」に分割されます。アプリケーションは結果の最初のページ、次に 2 ページと処理できます。
1 つの Query
は、サイズの制限である1 MB 以内の結果セットだけを返します。さらに結果があるかどうかを確認して、一度に 1 ページずつ結果を取り出すには、アプリケーションで次の操作を行う必要があります。
-
低レベルの
Query
結果を確認します。-
結果に
LastEvaluatedKey
要素が含まれており、それが Null 以外の場合、ステップ 2 に進みます。 -
結果に
LastEvaluatedKey
がない場合、これ以上取得する項目はありません。
-
-
以前のものと同じパラメータを使用して新しい
Query
リクエストを作成します。ただし、今回は、ステップ 1 からLastEvaluatedKey
値を取得して、新しいQuery
リクエストのExclusiveStartKey
パラメータとして使用します。 -
新しい
Query
リクエストを実行します。 -
ステップ 1 に進んでください。
言い換えると、Query
レスポンスからの LastEvaluatedKey
を次の Query
リクエストの ExclusiveStartKey
として使用する必要があります。Query
レスポンスに LastEvaluatedKey
の要素がない場合、結果の最後のページを取得します。LastEvaluatedKey
が空ではない場合でも、必ずしも結果セットにまだ値があることを意味するわけではありません。結果セットの最後まで到達したことを確認できるのは、LastEvaluatedKey
が空になったときだけです。
を使用して AWS CLI 、この動作を表示できます。は、 LastEvaluatedKey
が結果に表示されなくなるまで、低レベルのQuery
リクエストを DynamoDB に繰り返し AWS CLI 送信します。特定の年の映画タイトルを取得する次の AWS CLI 例を考えてみましょう。
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
通常、 はページ分割を自動的に AWS CLI 処理します。ただし、この例では、 AWS CLI --page-size
パラメータはページあたりの項目数を制限します。--debug
パラメータは、リクエストとレスポンスについての低レベルの情報を表示します。
この例を実行した場合、DynamoDB からの最初のレスポンスは次のようになります。
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}'
レスポンスの LastEvaluatedKey
は、すべての項目が取得されたわけではないことを示します。 AWS CLI 次に、 は DynamoDB に別のQuery
リクエストを発行します。 DynamoDB このリクエストとレスポンスのパターンが、最終レスポンスまで繰り返されます。
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}'
LastEvaluatedKey
がない場合、これ以上取得する項目がないことを示します。
注記
AWS SDKs、低レベルの DynamoDB レスポンス ( の有無を含むLastEvaluatedKey
) を処理し、Query
結果をページ分割するためのさまざまな抽象化を提供します。たとえば、SDK for Java のドキュメントインターフェイスでは、java.util.Iterator
サポートが利用可能なため、結果を一度に 1 つずつ確認できます。
各種のプログラミング言語のコード例については、「Amazon DynamoDB 利用開始ガイド」と、該当言語の「 AWS SDK ドキュメント」を参照してください。
Query
オペレーションの Limit
パラメータを使用して結果セット内の項目数を制限することで、ページサイズを小さくすることもできます。
DynamoDB でのクエリ実行の詳細については、「DynamoDB のクエリオペレーション」を参照してください。