最佳方法:如何将 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 集群上?

检索DynamoDB表中的所有数据并随后清除表的最佳方法

使用 AWS Datapipeline 将 DynamoDB 导出到 S3 数据

Aws Dynamodb数据导出到S3

使用 EMR 查询 DynamoDB 数据