如何ETL非常大的csv从AWS S3到Dynamo



在此处查找一些提示。我使用python3和lambda进行了一些安静的编码和研究。然而,超时是我在atm上遇到的最大问题。我正在尝试从S3中读取一个非常大的csv文件(3GB(,并将行推送到DynamoDB中。我目前一次读取大约1024*32个字节,然后使用pub/sub模式将行推入dynamo DB(使用asyncio进行批量写入(,它非常适合小文件,即~500K行。当我有数百万行时,它就会超时。我尽量不使用AWS胶水和/或EMR。我有一些限制。

有人知道这是否可以使用Lambda或step函数完成吗?如果是的话,你能分享一下你的想法吗?谢谢

除了lambda时间约束之外,当您在AWS lambda中读取文件时,您可能会遇到lambda内存约束,因为lambda只有512 MB的/tmp目录存储空间,这同样取决于您在lambda中读取文件的方式。

如果你不想通过AWS Glue或EMR,你可以做的另一件事是提供一个EC2,并从那里运行你在lambda中运行的代码。为了使其具有成本效益,您可以使EC2暂时化,即当您需要将S3运行到DynamoDB作业时提供它,并在作业完成后关闭它。这种瞬态性质可以通过Lambda函数来实现。您也可以使用Step函数来编排相同的内容。您可以查看的另一个选项是通过AWS数据管道。

最新更新