最佳方法:如何将 dynamodb 表导出到 csv 并将其存储在 s3
Posted
技术标签:
【中文标题】最佳方法:如何将 dynamodb 表导出到 csv 并将其存储在 s3【英文标题】:Best way: how to export dynamodb table to a csv and store it in s3 【发布时间】:2021-03-01 03:05:25 【问题描述】:我们有一个 lambda,它会在一些操作后更新 dynamodb 表。
现在我们要将整个 dynamodb 表导出到 csv 格式的 s3 存储桶中。
任何有效的方法来做到这一点。
我还发现了以下直接从 dynamodb 流式传输到 s3 的方式
https://aws.amazon.com/blogs/aws/new-export-amazon-dynamodb-table-data-to-data-lake-amazon-s3/
但在上面它将以 json 格式存储。并且无法找到有效处理 10GB 数据的方法
【问题讨论】:
我不认为这是本机支持的,因为 CSV 不适合 DynamoDB 支持的那种分层数据结构。如果您想自己滚动,可以利用parallel scan,但在 S3 中转换某个时间点的导出可能更容易。 【参考方案1】:据我所知,有三个“简单”选项。
选项 #1:执行扫描的程序
编写一个对表进行(并行)扫描然后以 CSV 格式输出结果的程序是相当简单的。一个没有花里胡哨的版本是大约 100-150 行 Python 或 Go 代码。
优点:
-
易于开发
可以从本地机器或 CI/CD 管道或其他任何方式轻松运行多次。
缺点:
-
这会花费你一些钱。扫描整个表会用完一些读取单元。根据您阅读的数量,这可能会很快变得昂贵。
根据数据量,这可能需要一段时间。
注意:如果您想在 Lambda 中运行它,请记住 Lambda 最多可以运行 15 分钟。因此,一旦您的数据超出这 15 分钟内的处理能力,您可能需要切换到 Step Functions。
选项 #2:处理 S3 备份
DynamoDB 允许您创建表到 S3 的备份(正如文章所描述的那样)。这些备份将采用 JSON 或类似 AWS 格式的 JSON。然后,您可以编写一个将这些 JSON 文件转换为 CSV 的程序。
优点:
-
(很多)比扫描便宜
缺点:
-
需要更多“管道”,因为您需要先创建备份,然后将其从 S3 下载到您要处理的任何位置等。
可能需要比选项 #1 更长的时间
【讨论】:
选项 2 不是自动需要人工干预..然后会选择选项 1 谢谢 Jens @SBD 你也可以自动化。例如使用 AWS cli 或自己编写一个小程序。不会那么难。以上是关于最佳方法:如何将 dynamodb 表导出到 csv 并将其存储在 s3的主要内容,如果未能解决你的问题,请参考以下文章
如何从 aws 控制台将 dynamoDB 表的全部记录导出到 CSV?
有没有办法将我的 DynamoDB 导出任务分组到一个 EMR 集群上?