PgSQL - 将选择查询数据直接导出到带有标题的亚马逊 s3

Posted

技术标签:

【中文标题】PgSQL - 将选择查询数据直接导出到带有标题的亚马逊 s3【英文标题】:PgSQL - Export select query data direct to amazon s3 with headers 【发布时间】:2014-02-05 13:53:52 【问题描述】:

我有这个要求,我需要将报告数据直接导出到 csv,因为获取数组/查询响应然后构建 scv 并再次将最终的 csv 上传到亚马逊需要时间。有没有一种方法可以让我直接使用 redshift postgresql 创建 csv。 PgSQL - 将选择查询数据直接导出到带有标头的亚马逊 s3 服务器 这是我的 pgsql 版本 - amazon redshift 上的版本 PgSQL 8.0.2

谢谢

【问题讨论】:

【参考方案1】:

您可以使用UNLOAD 语句将结果保存到 S3 存储桶。请记住,这将创建多个文件(每个计算节点至少一个)。

您必须下载所有文件,在本地合并它们,排序(如果需要),然后添加列标题并将结果上传回 S3。

使用 EC2 实例应该不会花费太多时间 - EC2 和 S3 之间的连接非常好。

根据我的经验,最快的方法是使用 shell 的命令:

# run query on the redshift
export PGPASSWORD='__your__redshift__pass__'
psql \
    -h __your__redshift__host__ \
    -p __your__redshift__port__ \
    -U __your__redshift__user__ \
    __your__redshift__database__name__ \
    -c "UNLOAD __rest__of__query__"

# download all the results
s3cmd get s3://path_to_files_on_s3/bucket/files_prefix*

# merge all the files into one
cat files_prefix* > files_prefix_merged

# sort merged file by a given column (if needed)
sort -n -k2 files_prefix_merged > files_prefix_sorted

# add column names to destination file
echo -e "column 1 name\tcolumn 2 name\tcolumn 3 name" > files_prefix_finished

# add merged and sorted file into destination file
cat files_prefix_sorted >> files_prefix_finished

# upload destination file to s3
s3cmd put files_prefix_finished s3://path_to_files_on_s3/bucket/...

# cleanup
s3cmd del s3://path_to_files_on_s3/bucket/files_prefix*
rm files_prefix* files_prefix_merged files_prefix_sorted files_prefix_finished

【讨论】:

嗯,这是我的第一种方法,但我尝试使用 php 的 cron 作业需要 8 多分钟来解析 16mb 部分文件并转换为 22mb 最终 csv 文件,这是不被接受的。我需要一些可以在几分钟内生成 gb 报告 csv 的东西,这对于这种方法是不可行的 有什么东西可以直接从postgresql或者amazon技术导出到csv

以上是关于PgSQL - 将选择查询数据直接导出到带有标题的亚马逊 s3的主要内容,如果未能解决你的问题,请参考以下文章

如何将阿里云RDS PgSQL恢复到本地主机中

如何将 mybatis 选择查询的巨大结果集导出到 csv?

sqlserver 如何将查询结果导出到excel中

asp.net怎么实现点击导出按钮将查询到的datatable中的数据直接导出到excel文件。

如何在 PL/pgSQL 中的动态选择查询中使用迭代器变量?

将 MS Access 查询导出到记事本