以 AWS CLI 取出 DynamoDB 的所有項目
AWS CLI 把分頁藏了起來。aws dynamodb scan 會依資料表所需,發出多次 1 MB 的服務呼叫,並印出一份合併後的結果,所以讀十個項目的命令和讀一千萬個項目的命令是同一個命令。
那既是它的方便之處,也是陷阱。呼叫次數、記憶體與帳單都會隨資料表成長,而那一行始終只有一行。
程式碼
aws dynamodb scan --table-name 'Music'合併後的輸出裝著資料表中的每一個項目:
{
"Items": [
{"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}, ...}
],
"Count": 1287,
"ScannedCount": 1287
}說明
--no-paginate是那個只呼叫一次的開關 — 它會讓 CLI 停止追著游標跑,所以你拿到第一頁,別無其他。看一眼可以,做完整讀取就錯了(游標如何運作)。--page-size改變的是呼叫次數,不是輸出 — AWS 說得很直白:"Changing the page size doesn't affect the output; it affects only the number of API calls that need to be made to generate the output."。當一個大頁面逾時的時候才動它,絕不是為了省錢。兩種方式的讀取成本完全一樣。--max-items是輸出停下、NextToken開始的地方 — 它會印出那麼多個項目,外加一個給--starting-token用的續讀 token。把它和--page-size設成同一個數字:AWS 警告說取值不同"can get unexpected results with missing or duplicated items"。--query是在你的機器上跑的 — 它是套用在已印出結果上的 JMESPath,而那是在每個項目都已經被讀取並計費之後才套用的。--projection-expression(再加上給保留字用的--expression-attribute-names)才是 DynamoDB 看得到的那一個,而它縮小的是回應,不是帳單。--filter-expression同樣是在項目被收費之後才把它們丟掉(帶過濾條件的 Scan)。- 一切都會先緩衝,然後遇上分頁器 — CLI 會在列印前累積每一頁,而 CLI v2 預設在 macOS 與 Linux 上把結果送進
less、在 Windows 上送進more。在一張大資料表上,那同時是一次記憶體尖峰與一個卡住的終端機。加上--no-cli-pager,或把AWS_PAGER設成空字串,再用--max-items切片。 - 平行 scan 從 shell 也做得到 — 用
--segment i --total-segments N跑 N 份,各自對自己的分片自動分頁。總成本相同,牆鐘時間低得多(何時值得這麼做)。
改用視覺化操作
一行命令也可能是一個昂貴的命令。DynamoDB 定價計算機會在你執行之前,替完整讀取你的資料表標上一個數字。
DynoTable 是在一個格線中翻閱資料表,而不是在終端機緩衝區裡,並且能把那個格線背後的 Scan 匯出成一個 aws dynamodb 命令。下載 DynoTable。
相關範例
- 在 Node.js 中取出所有項目 — 以明確的迴圈做同一件完整讀取。
- 在 Python 中取出所有項目 — 以 boto3 的 paginator 做同一件完整讀取。
- 以 AWS CLI 執行 DynamoDB Scan — 帶
--filter-expression的掃描。 - 平行 scan — Segment/TotalSegments、工作者數量,以及何時值得費這個工。
- 為什麼我的 DynamoDB Scan 又慢又貴? — 成本模型與如何避開它。
- DynamoDB ProvisionedThroughputExceededException — 讀取整張資料表是撞上它的經典方式。
- 「The provided starting key is invalid」 — 分頁迴圈中被弄壞的續讀鍵。
參考資料
- 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-28,對照上方連結的官方 AWS 文件。