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的主要内容,如果未能解决你的问题,请参考以下文章
如何将 mybatis 选择查询的巨大结果集导出到 csv?
asp.net怎么实现点击导出按钮将查询到的datatable中的数据直接导出到excel文件。