使用 AWS 处理 .csv 数据的最佳方式
Posted
技术标签:
【中文标题】使用 AWS 处理 .csv 数据的最佳方式【英文标题】:Best way to process .csv data using AWS 【发布时间】:2017-07-13 18:21:48 【问题描述】:所以每天我都会(自动)将大量 .csv 文件上传到我的 s3 存储桶中,我的下一步是将这些表加入/合并/concat/etc 进入更最终的状态,以便将其上传到 redshift。 为了做到这一点,你推荐我哪项服务?我分析了不同的方法:
s3 -> EC2 -> 使用 Python 处理数据 -> Redshift(我不认为这真的很有效) s3 -> Pipeline -> EMR -> Pipeline -> Redshift(我对 EMR 的了解为 0) 我可以处理它已经处于红移状态吗?还有其他方法吗?通常我会产生 1400 万行数据,所以它需要有点高效。
数据的操作只是合并或连接表。示例:
表 1:键、d1、d2、d3
表 2:键、d4、d5
redshift 上的预期表:key, d1, d2, d3, d4, d5
在另一种情况下,只是将一个放在另一个之下。
【问题讨论】:
您是否以任何方式操作内容,还是只是将多个文件合并为一个文件? Amazon Redshift 可以从多个文件加载数据——事实上,这是推荐的方法,因为它可以并行化该过程。随时编辑您的问题,以添加有关您的流程正在做什么的更多详细信息。 【参考方案1】:Redshift 可以轻松处理此问题,并且可能比您提到的方法快 100 倍。
使用COPY
将 CSV 加载到单独的暂存中,然后将它们插入到最终表中(并在需要时截断暂存表)。
INSERT INTO final_table
SELECT a.key, a.d1, a.d2, a.d3, b.d4, b.d5
FROM table_1 AS a
LEFT JOIN table_2 AS b
USING (key);
【讨论】:
虽然这实际上是真的,但在使用临时表处理数据时,您确实受到了限制。以防万一其他人想知道正确的方法是使用 EMR 和脚本。我建议使用 Spark,因为它通过 pyspark 与 Python 集成。 临时表如何“真正受限”?为什么 EMR 是“正确的方法”? OP 有 2 个 CSV 中的数据,并希望将它们加入并作为表格保存。 OP 已经有一个 Redshift 集群,所以在我看来,给出的答案是最简单(也是最快)的方法。 好吧,因为我是 OP,显然我并没有解释情况的所有方面...... :D 无论如何谢谢它真的很有帮助。以上是关于使用 AWS 处理 .csv 数据的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章
在 Terraform 中将多个 AWS 账户作为环境处理的最佳方式是啥?