如何将表中的数据作为 CSV 从 Greenplum 数据库导出到 AWS s3 存储桶

Posted

技术标签:

【中文标题】如何将表中的数据作为 CSV 从 Greenplum 数据库导出到 AWS s3 存储桶【英文标题】:How to export data from table as CSV from Greenplum database to AWS s3 bucket 【发布时间】:2018-08-30 00:09:19 【问题描述】:

我在表格中有数据

select * from my_table

它包含10k 观察。如何将表中的数据作为 CSV 导出到s3 bucket。 (我不想将数据导出到我的本地机器然后推送到s3)。

【问题讨论】:

怀疑这有点矫枉过正,但 DMS 可能可以做到这一点(参见 docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.S3.html)。您有什么理由不想编写一个简单的客户端(或者可能是 Lambda 函数)来执行此操作? 您使用的是 Greenplum 还是 Postgres? 【参考方案1】:

请,请,请停止使用 PostgreSQL 和 Greenplum 标记您的问题。如果您使用的是 Greenplum 与 PostgreSQL,那么您的问题的答案会非常不同。我怎么强调都不过分。

如果您使用的是 Greenplum,您应该使用外部表中的 S3 协议来读取和写入数据到 S3。

所以你的桌子:

select * from my_table;

还有你的外部表:

CREATE EXTERNAL TABLE ext_my_table (LIKE my_table) 
LOCATION ('s3://s3_endpoint/bucket_name')
FORMAT 'TEXT' (DELIMITER '|' NULL AS '' ESCAPE AS E'\\');

然后写入您的 s3 存储桶:

INSERT INTO ext_my_table SELECT * FROM my_table;

您需要在 Greenplum 集群上进行一些配置,以便您也拥有一个 s3 配置文件。这也适用于每个段目录。

gpseg_data_dir/gpseg-prefixN/s3/s3.conf

文件内容示例:

[default]
secret = "secret"
accessid = "user access id"
threadnum = 3
chunksize = 67108864

更多关于 S3 的信息可以在这里找到:http://gpdb.docs.pivotal.io/5100/admin_guide/external/g-s3-protocol.html#amazon-emr__s3_config_file

【讨论】:

【参考方案2】:

我建议首先使用 WINSCP 或文件传输将数据加载到您的主节点。 然后将此文件从您的主节点移动到 S3 存储。

因为,将数据从 Master 节点移动到 S3 存储会利用 Amazon 的带宽,这将比我们用于将文件从本地机器传输到 S3 的本地连接带宽快得多。

【讨论】:

以上是关于如何将表中的数据作为 CSV 从 Greenplum 数据库导出到 AWS s3 存储桶的主要内容,如果未能解决你的问题,请参考以下文章

如何仅将表结构从 csv 文件导入 Access

如何将表中的数据用作 SQL 中另一个命令的值?

如何将表数据从 PostgreSQL (pgAdmin) 导出到 CSV 文件?

如何将具有自定义枚举类型的数据从 csv 插入现有的 PostgreSQL 表

将表中的 SQL 数据作为 JSON 获取到 Bootstrap Table 脚本中

GCP将数据作为字符串从GCS中的CSV文件加载到BigQuery表中