Node.js (AWS SDK v3) で DynamoDB のすべてのアイテムを取得する
DynamoDB に「select all」はありません。テーブル全体を読み取るとは、最後までページネーションする Scan を意味します。各レスポンスは最大でも1 MB を運びます。LastEvaluatedKey を ExclusiveStartKey として戻しながらループし、キーが返らなくなるまで続けます。
Code
import {DynamoDBClient, ScanCommand} from '@aws-sdk/client-dynamodb';
const client = new DynamoDBClient({region: 'us-east-1'});
const items = [];
let lastEvaluatedKey;
do {
const response = await client.send(
new ScanCommand({
TableName: 'Music',
ExclusiveStartKey: lastEvaluatedKey
})
);
items.push(...(response.Items ?? []));
lastEvaluatedKey = response.LastEvaluatedKey;
} while (lastEvaluatedKey);
console.log(`Table holds ${items.length} items`);Explanation
- ループこそが要点 — 単一の
Scan呼び出しはテーブルを返しません。最大1 MB を返します。最初のレスポンスの後で止めるのが、典型的な「スキャンでアイテムが欠落する」バグです。LastEvaluatedKeyが存在しないことだけが、すべてを読み終えたことを意味します。 - メモリ —
itemsはテーブル全体を保持します。大きなテーブルでは、蓄積する代わりにループ内で各ページを処理してください(ファイルに書き込む、ストリームする、集計する)。 - 大きなテーブルでより高速: 並列スキャン —
Segment/TotalSegmentsで作業を分割します。N 個のワーカーを実行し、それぞれが自分のセグメントを自分のページネーションループでスキャンします。合計コストは同じで、実時間は大幅に短くなります。 - コスト — フルスキャンは、実行するたびにすべてのアイテムの全バイトを読み取り(課金し)ます。
ProjectionExpressionでレスポンスを絞れます(返される属性は減りますが、読み取りコストは同じです)。そしてスキャンをホットパスに置かないでください。それは Query とアクセスパターン設計のためのものです。 - ついでにフィルタリング?
FilterExpressionはアイテムが読み取られて(課金されて)からそれらを落とします — Scan with a filter を参照。
Do it visually
テーブルをざっと見るのにスクリプトは要りません。DynoTable をダウンロードすれば、任意のテーブルをページネーションされたグリッドで閲覧できます。スキャンのページ送りを代わりに行うので、間違えるループはありません。そしてスキャンして課金される前に、DynamoDB pricing calculator がテーブルのフル読み取りが実際にいくらかかるかを示します。
Related examples
- Get all items in Python — boto3 のページネーターを使った同じフル読み取り。
- Get all items with the AWS CLI — CLI が代わりにページ送りします。
- DynamoDB Scan in Node.js —
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
- Scanning tables in DynamoDB — Amazon DynamoDB Developer Guide
- DynamoDB read and write operations (capacity unit consumption) — Amazon DynamoDB Developer Guide
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。