加快我的数据加载操作

Posted

技术标签:

【中文标题】加快我的数据加载操作【英文标题】:Speedup my data load operation 【发布时间】:2017-08-02 12:55:02 【问题描述】:

如果这个问题在这里的专家听众听起来很傻,请原谅我的无知

目前根据我的用例 我正在对 aws redshift 表中存在的数据执行某些分析,并将它们保存为 s3 存储桶中的 csv 文件 (操作有点类似于Pivot for redshift database) 然后我使用复制命令将数据更新回redshift db

目前在对 200 个 csv 文件执行分析(在 python3 中完成)后,这些文件保存在 redshift 中的 200 个不同的表中

csv 的数量会随着时间不断增加 目前整个过程大约需要50-60分钟才能完成

25 分钟获取大约 200 个 csv 并在 s3 存储桶中更新它们

25 分钟将大约 200 个 csv 更新为 200 个 aws 红移表

csv 的大小从几 MB 到 1GB 不等

我一直在寻找可以帮助我减少时间的工具或 aws 技术

*附加信息

csv 的结构不断变化。因此我必须删除并再次创建表 这将是一项重复性任务,每 6 小时执行一次

【问题讨论】:

Redshift 对于您正在尝试做的事情可能不是一个好的用例。 Redshift 真正用于数据仓库。我从个人经验中发现,除非您阅读他们的最佳实践文档,否则 Redshift 充满了您会遇到的陷阱。如果您想做诸如不断生成报告之类的事情,不妨考虑使用 EMR。 【参考方案1】:

您可以通过以下方式实现显着加速:

    使用CSV的分段上传到S3,所以不用等待单个文件上传,分段上传将文件并行上传到S3,为您节省大量时间。阅读here 和here。 Here 是它的 Boto3 参考。 将数据从 S3 并行复制到 Redshift。如果将文件拆分为多个部分,然后运行 ​​COPY 命令,数据将从多个文件并行加载,而不是等待 1 GB 的文件加载,这可能非常慢。阅读更多关于它的信息here。

希望这会有所帮助。

【讨论】:

如果您认为该问题回答了您的问题,请将其标记为“已接受”。【参考方案2】:

您应该探索Athena。它是 AWS 软件包中的一个工具,可让您灵活地查询 csv(甚至 gzip)文件。

这将节省您手动复制 Redshift 表中数据的时间,并且您将能够从 csv 本身查询数据集。 Athena 能够从 s3 存储桶中查询它们。

但是,它仍处于开发阶段,您将不得不花一些时间来使用它,因为它对用户不太友好。查询中的语法错误会将您从 AWS 会话中注销,而不是引发语法错误。此外,由于 Athena 在很大程度上尚未开发,因此您不会在 Internet 上找到太多文档和开发人员讨论。

Athena 会根据您的查询获取的数据向您收费,因此更加方便携带。如果查询未能执行,亚马逊不会向您收费。

【讨论】:

如果您想将 csv 中的数据与 Redshift 中的数据结合起来,请考虑使用 Redshift Spectrum - 这与 Athena 具有相似的功能,但文件在 Redshift 中显示为“表”。 感谢您提供更多信息。一定会探索它。

以上是关于加快我的数据加载操作的主要内容,如果未能解决你的问题,请参考以下文章

如何加快加载数据集

加快将 json 数据加载到数据框中

在 tabBar didSelectItem 上加载核心数据的替代方法?还是加快速度?

如何加快 Spark 中的大数据框连接

将数据从 MongoDB 并行加载到 python

有哪些方法可以加快 Pytorch 中大型稀疏数组(约 100 万 x 100 万,密度约 0.0001)的数据加载速度?