Python (boto3) で DynamoDB のすべてのアイテムを取得する
DynamoDB に「select all」はありません。テーブル全体を読み取るとは、最後までページネーションする scan を意味します。各レスポンスは最大でも1 MB を運びます。boto3 の組み込みのスキャンページネーターが、すべてのページにわたって LastEvaluatedKey を代わりにたどります。
Code
import boto3
client = boto3.client("dynamodb")
paginator = client.get_paginator("scan")
items = []
for page in paginator.paginate(TableName="Music"):
items.extend(page["Items"])
print(f"Table holds {len(items)} items")Explanation
- ページネーターこそが要点 — 単一の
scan呼び出しはテーブルを返しません。最大1 MB を返します。client.get_paginator("scan")は、テーブルが尽きるまで(LastEvaluatedKeyをExclusiveStartKeyとして戻しながら)後続のリクエストを発行します。アイテムが「欠落」していると悩むときに人が忘れるループです。(手作業でやりますか?レスポンスにLastEvaluatedKeyが含まれる限り呼び出し続けてください。) - メモリ —
itemsはテーブル全体を保持します。大きなテーブルでは、蓄積する代わりにループ内で各pageを処理してください(ファイルに書き込む、ストリームする、集計する)。 - 大きなテーブルでより高速: 並列スキャン —
Segment=i, TotalSegments=Nを渡し、N 個のワーカー(スレッド/プロセス)を実行します。それぞれが自分のセグメントをページネーションします。合計コストは同じで、実時間は大幅に短くなります。 - コスト — フルスキャンは、実行するたびにすべてのアイテムの全バイトを読み取り(課金し)ます。
ProjectionExpressionはレスポンスを縮めますが、請求は縮めません。スキャンをホットパスに置かないでください。それは query とアクセスパターン設計のためのものです。 - アイテムは DynamoDB JSON(
{"S": ...})で返ります。ネイティブな Python 型がほしいですか?リソースAPI を使ってください(table.scan+ 手動のLastEvaluatedKeyループ。リソース API にはページネーターがありません)。
Do it visually
テーブルをざっと見るのにスクリプトは要りません。DynoTable をダウンロードすれば、任意のテーブルをページネーションされたグリッドで閲覧できます。スキャンのページ送りを代わりに行うので、間違えるループはありません。そしてスキャンして課金される前に、DynamoDB pricing calculator がテーブルのフル読み取りが実際にいくらかかるかを示します。
Related examples
- Get all items in Node.js — 明示的なループを使った同じフル読み取り。
- Get all items with the AWS CLI — CLI が代わりにページ送りします。
- DynamoDB Scan in Python —
FilterExpressionを使ったスキャン。 - Parallel scans — Segment/TotalSegments、ワーカー数、そしていつ手を出すべきか。
- Why is my DynamoDB Scan slow and expensive? — コストモデルとその回避方法。
- DynamoDB ProvisionedThroughputExceededException — テーブル全体の読み取りは、これに当たる典型的な方法です。
- "The provided starting key is invalid" — ページネーションループで壊れた再開キー。
References
- Scan — Amazon DynamoDB API Reference
- DynamoDB.Paginator.Scan — Boto3 documentation
- Scanning tables in DynamoDB — Amazon DynamoDB Developer Guide
- DynamoDB read and write operations (capacity unit consumption) — Amazon DynamoDB Developer Guide
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。