【问题标题】:Bulk load AWS S3 to Postgres streaming STDIN将 AWS S3 批量加载到 Postgres 流式 STDIN
【发布时间】: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


【解决方案1】:

我最终在这个设计中使用了 DMS,其中 S3 作为源,postgres 作为目标。 DMS 应该是 cli-scripted 以使该过程可重复和按需参与,但是如果您偶尔需要加载数据,那么脚本会在从便携式设备中获得一致的结果方面得到回报实用性

【讨论】:

    猜你喜欢
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-16
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    相关资源
    最近更新 更多