DynamoDB 能导出到 S3 吗?
能。DynamoDB 内置了到 Amazon S3 的导出功能,可以把一张表在过去 35 天内任意时间点的整表或增量快照写成 DynamoDB JSON 或 Amazon Ion。它要求开启时间点恢复(PITR),异步运行,且不消耗读容量。
整表导出与增量导出
整表导出会捕获整张表(数据加上本地二级索引)在你选定的那个时间点上的样子。而增量导出只捕获在你指定的时间窗口内发生变更、被更新或被删除的数据,窗口在 15 分钟到 24 小时之间。两者都异步运行,对表的性能和可用性没有影响。
前提条件与目的地
唯一的前提条件是表上启用了 PITR;导出读取的是你的连续备份,而不是活表。你可以导出到另一个 AWS 账户、甚至另一个区域的 S3 存储桶,而数据是端到端加密的。
输出不是 CSV
导出写出的是 DynamoDB JSON 或 Amazon Ion——那种带 {"S": ...} 和 {"N": ...} 描述符的类型标签线路格式——绝不是 CSV。要从一次导出里拿到电子表格,就得经 Athena、Glue 或一段脚本再跳一次;导出为 CSV 指南把每种选项都走了一遍。
它要花多少钱
整表导出按所选时间点上表的大小计费;增量导出按从连续备份中处理的数据量计费(有 10 MB 的最低收费)。S3 的存储和 PUT 请求另行计费。
导出不是读一张表的便宜办法
在 us-east-1 拿一张 100 GB 的表算算账。导出是每 GB 0.10 美元,也就是 10.00 美元。用最终一致的 Scan 读同样这 100 GB,会消耗 13,107,200 个读取单元,按需价格是 1.64 美元。在你还没把它的前提条件算进去之前,导出就已经贵了六倍:PITR 是每 GB-月 0.20 美元,所以让那张表保持可导出状态,无论你有没有真的跑过导出,每月都是 20 美元。
这笔钱买的是容量。那次 Scan 在 5,000 RCU 下大约要 44 分钟,而且每一个单元都花在你的应用正在读的同一张表上,所以在一张繁忙的预置容量表上,你要么把生产限流,要么为这个作业额外预置。导出不碰任何表容量,不可能限流任何东西,还会交给你一个一致的时间点。小的、闲置的、或者只需要一部分的表就扫描它;活跃的表就导出它。
请把 1.64 美元当作下限。AWS 指出,稀疏的或非常大的表可能会被收取超出实际扫描数据量的读取单元。
深入了解
按导出为 CSV 指南走完整个流程,在 DynamoDB JSON 转换器里拆开导出的项目,或者下载 DynoTable 直接从桌面浏览和导出表数据。
参考资料
- DynamoDB data export to Amazon S3: how it works — Amazon DynamoDB Developer Guide
- Quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Point-in-time backups for DynamoDB — Amazon DynamoDB Developer Guide
- Amazon DynamoDB pricing
- Scanning tables in DynamoDB — Amazon DynamoDB Developer Guide,于 2026-07-28 重新核对
Scan如何消耗读容量。
最后核实于 2026-07-13,依据上方链接的 AWS 官方文档。
2026-07-28 依据从 AWS Price List API 读取的 us-east-1 导出、PITR 与请求费率核算成本。Scan 那个数字所依赖的 4 KB 取整方式是实测而非假设:在 DynamoDB Local 3.3.0 上扫描 998 KB 的项目报告了 125 个读取单元,与聚合模型相符,排除了按项目取整。