Python(boto3)で DynamoDB の全アイテムを取得する

boto3 でテーブル全体を読むということは、scan を最後までページングするということです。各レスポンスは 1 MB で頭打ちになり、低レベルクライアントの組み込みページネーターが全ページにわたって LastEvaluatedKey を代わりに追いかけてくれます(DynamoDB のカーソルの仕組み)。

ここではページネーション以上に、どの boto3 API を選ぶかが効いてきます。そしてページネーターは、その理由の半分にすぎません。

コード

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")

解説

  • ページネーターはクライアントのものであって、リソースのものではありませんboto3.resource("dynamodb").Table(…).scan にはページネーターがそもそも無いので、そちらでは LastEvaluatedKey のループを自分で書くことになります。それだけでも、全件読み取りに低レベルクライアントを使う十分な理由になります。
  • リソース API は数値を Decimal に変換します — 保存された {"N": "1994"}Decimal('1994') として返り、json.dumps はカスタムエンコーダーなしではこれのシリアライズを拒みます。上のクライアントは生の {"N": "1994"} を渡し、変換を自分に任せます(エンコーディング)。
  • ページネーターは置き換えずに調整しましょうpaginator.paginate(TableName="Music", PaginationConfig={"PageSize": 500, "MaxItems": 10000}) のように。boto3 は PageSize を "the number of items returned per page of each result"、MaxItems を合計の上限と定義しており、後者は NextToken を出力するので StartingToken で再開できます。
  • 並列スキャンにはスレッドごとに 1 つのクライアントが必要で、その作り方に注意が要りますSegmentTotalSegments が仕事を分割します。boto3 自身の指針は、クライアントはスレッドセーフだがセッションとリソースはそうではない、というものです。さらに "Invoking boto3.client() inside of a concurrent context may result in response ordering issues" とも警告しています。ファンアウトの前にクライアントを作るか、各ワーカーに専用の boto3.session.Session() を持たせましょう(並列が割に合う場面)。
  • items はテーブルのサイズまで膨らみます — テーブルが小さいと分かっている場合を除き、保持し続けるリストに追加するのではなく、ループの中で page ごとに処理しましょう。
  • スキャンは実行のたびに、読んだバイトすべてに課金しますProjectionExpression が縮めるのはレスポンスであって請求ではありません(理由)。FilterExpression は、アイテムが読まれて課金された後に落とします(フィルター付きの Scan)。ホットパスで欲しいのは query です。

ビジュアルに行う

フルスキャンの請求額は、アイテムサイズ × アイテム数を 4 KB 単位で切り上げたものです。アイテムサイズ計算ツールは、貼り付けたアイテムからそのアイテムあたりの側を出してくれます。

DynoTable は代わりに、無限スクロールのグリッドで実テーブルをページングします。SQL エディターは、実行前にクエリがコンパイルされる操作名を示します。RCU の見積もりは、テーブルのメタデータが対応している場合にのみ表示されます。DynoTable をダウンロードしてください。

関連する例

参考資料

最終検証日 2026-07-28、上記にリンクした公式 AWS ドキュメントに照らして確認しました。

このリクエストをビジュアルに組み立てる

この操作を無料の DynamoDB クエリビルダーで組み立て — キー条件、フィルタ、インデックス、Limit、ソート順、ページネーションループ — 実行可能な SDK v3・CLI・boto3 のプログラムとしてコピーして戻れます。

DynamoDB クエリビルダーを開く

Console なしで DynamoDB を扱う

DynamoDB では実行できない本物の SQL(JOINs、GROUP BY、集計)を実行する高速な DynamoDB デスクトップクライアント。ビジュアル編集と、あなた自身の Bedrock キーで動く AI エージェントを備えています。

30日間無料トライアル、クレジットカード不要 — その後は期限のない Free プラン。