使用 AWS CLI 讀取 DynamoDB 所有項目
DynamoDB 沒有「select all」— 讀取整個表格意味著一個分頁的 Scan。好消息是:AWS CLI 會自動分頁,在幕後視需要進行多次 1 MB 的服務呼叫,並印出一份合併後的結果。
Code
aws dynamodb scan --table-name 'Music'合併後的輸出包含表格中的每一個項目:
{
"Items": [
{"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}, ...}
],
"Count": 1287,
"ScannedCount": 1287
}說明
- 自動分頁 — 與 SDK 不同,CLI 預設會為你追蹤
LastEvaluatedKey:一個指令、每一個項目。(--no-paginate會將它限制為單一服務呼叫 — 只有前約 1 MB。) - 大表格的分塊輸出 — 完整的表格會在印出前載入記憶體,因此對大表格請以分片方式讀取:
--max-items 1000印出 1000 個項目加上一個NextToken;以--starting-token <token>續讀。讓--page-size等於--max-items,以避免跨分塊遺漏/重複列。 - 更少的位元組、相同的帳單 —
--projection-expression 'Artist, SongTitle'(搭配--expression-attribute-names處理保留字)只回傳那些屬性,但 scan 仍會對讀取的每個項目的每個位元組計費。 - 在大表格上更快:平行 scan — 以
--segment i --total-segments N執行 N 份,每一份各自對自己的分片自動分頁。總成本相同,但實際耗時大幅降低。 - 順便過濾?
--filter-expression會在項目被讀取(並計費)之後丟棄它們 — 見 帶 filter 的 Scan。要 pipe 給jq?加上--output json,並記得那些值是 DynamoDB JSON。
改用視覺化操作
單純看看一個表格,不需要一整個終端機的 DynamoDB JSON:下載 DynoTable 即可在分頁的格線中瀏覽任何表格 — 它會為你翻過 scan 的分頁。而在你 scan 並付費之前,DynamoDB 定價計算機 會顯示完整讀取一次你的表格實際花多少。
相關範例
- 在 Node.js 中讀取所有項目 — 以明確的迴圈執行相同的完整讀取。
- 在 Python 中讀取所有項目 — 以 boto3 的 paginator 執行相同的完整讀取。
- 使用 AWS CLI 執行 DynamoDB Scan — 帶
--filter-expression的 scan。 - 平行 Scan — Segment/TotalSegments、worker 數量,以及何時值得。
- 為什麼我的 DynamoDB Scan 又慢又貴? — 成本模型以及如何避免它。
- DynamoDB ProvisionedThroughputExceededException — 讀取整個表格是撞上它的經典做法。
- "The provided starting key is invalid" — 分頁迴圈中損壞的續讀 key。
References
- Scan — Amazon DynamoDB API Reference
- scan — AWS CLI Command Reference
- Using AWS CLI pagination options — AWS CLI User Guide
- DynamoDB read and write operations (capacity unit consumption) — Amazon DynamoDB Developer Guide
最後驗證於 2026-07-13,對照上方連結的 AWS 官方文件。