将 Greenplum 数据库作为 .csv 导出到 Amazon S3
Exporting a Greenplum data base to Amazon S3 as a .csv
假设场景 - 我有一个 10 节点的 Greenplum 集群,在 1000 table 秒中有 100 TB 的数据,由于某些原因需要卸载到 S3。理想情况下,最终结果是一个 .csv 文件,对应于数据库中的每个 table。
我有三种可能的方法,每种方法都有优点和缺点。
COPY - 有一个问题已经回答了如何做,但是在分布式架构中 psql COPY 的问题是,它是否都必须经过 master,这为 100TB 数据的移动造成了瓶颈。
gpcrondump - 这将为每个 table 创建 10 个文件,格式为制表符分隔,这将需要一些 post-gpcrondump ETL 将文件合并为一个 .csv,但它需要充分利用分布式架构并自动记录 successful/failed 次传输。
EWT - 利用分布式架构并将每个 table 写入单个文件而不将其保存在本地内存中直到构建完整文件,但可能是最复杂的脚本因为你需要实现 ETL,你不能在转储之后单独做。
当我们遍历数据库并找出哪些 table 失败时,所有选项都会遇到 table 锁的不同问题,因此我们可以重新解决它们以完成数据传输.
您会使用哪种方法,为什么?
假设场景 - 我有一个 10 节点的 Greenplum 集群,在 1000 table 秒中有 100 TB 的数据,由于某些原因需要卸载到 S3。理想情况下,最终结果是一个 .csv 文件,对应于数据库中的每个 table。
我有三种可能的方法,每种方法都有优点和缺点。
COPY - 有一个问题已经回答了如何做,但是在分布式架构中 psql COPY 的问题是,它是否都必须经过 master,这为 100TB 数据的移动造成了瓶颈。
gpcrondump - 这将为每个 table 创建 10 个文件,格式为制表符分隔,这将需要一些 post-gpcrondump ETL 将文件合并为一个 .csv,但它需要充分利用分布式架构并自动记录 successful/failed 次传输。
EWT - 利用分布式架构并将每个 table 写入单个文件而不将其保存在本地内存中直到构建完整文件,但可能是最复杂的脚本因为你需要实现 ETL,你不能在转储之后单独做。
当我们遍历数据库并找出哪些 table 失败时,所有选项都会遇到 table 锁的不同问题,因此我们可以重新解决它们以完成数据传输.
您会使用哪种方法,为什么?