【发布时间】:2018-11-09 11:38:30
【问题描述】:
目标是将 s3 存储桶中的 csv 加载到 RDS 中的 postgres 表中。在寻找“最佳实践”时,我发现 AWS 推荐了他们的“数据管道”产品。他们为您提供了一个将 csv 批量加载到 rds mysql 的入门模板。该模板类似于下面的屏幕截图。我的反应是“哇——所有这些框和箭头只是为了将 csv 加载到表格中?”
所以我的问题是“我们能否找到一种更简单的方法来实现相同的目标?”。假设我的存储桶、我的数据库和一个免费的 T2.micro EC2 实例位于同一个区域。假设 AWS CLI 和 postgres 客户端安装在 EC2 上。
我可以运行以下命令,该命令将 CSV 从存储桶读取到标准输出,并将流通过管道传输到 postgres 批量加载命令:
aws s3 cp s3://mybucket/dummy.csv - | psql -d mydb -p 5432 -c "copy dummy(f1, f2) from stdin with(format csv);"
^^^ 这适用于 50MB 的文件!它似乎不需要大量的内存缓冲区。它不显示进度。这种方法适用于 10GB 的超大文件吗? 100GB?等等?这是强大的还是我真的需要使用数据管道产品?
【问题讨论】:
-
FWIW,以类似的方式将 300MB 文件从 S3 上传到 RedShift。不过有兴趣知道是否有限制。
-
@StuartLC redshift 通过 COPY 命令原生支持 s3。这适用于 TB 的平面文件。 Postgres RDS 没有对 s3 的本机支持,这就是我从 STDIN 进行管道传输的原因
标签: postgresql amazon-web-services amazon-s3 amazon-rds