使用 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会在项目被读取(并计费)之后才丢弃它们——见 带过滤器的 Scan。管道传给jq?加上--output json,并记住这些值是 DynamoDB JSON。
可视化操作
浏览一张表不需要满终端的 DynamoDB JSON:下载 DynoTable 即可在分页网格中浏览任何表——它会替你翻阅 scan 的各页。而在你 scan 并付费之前,DynamoDB 定价计算器会显示完整读取你的表实际花费多少。
相关示例
- Node.js 中获取所有项目 — 用一个显式循环完成同样的全表读取。
- Python 中获取所有项目 — 用 boto3 的分页器完成同样的全表读取。
- 使用 AWS CLI 的 DynamoDB Scan — 带
--filter-expression的扫描。 - 并行 scan — Segment/TotalSegments、工作线程数量,以及何时值得这么做。
- 为什么我的 DynamoDB Scan 又慢又贵? — 成本模型以及如何避免。
- DynamoDB ProvisionedThroughputExceededException — 读取整张表是撞上它的经典方式。
- "The provided starting key is invalid" — 分页循环中损坏的续读键。
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
Last verified 2026-07-13 against the official AWS documentation linked above.