PgSQL - 使用标题直接导出选择查询数据到amazon s3

时间:2014-02-05 13:53:52

标签: amazon-s3 amazon-redshift

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

由于

1 个答案:

答案 0 :(得分:2)

您可以使用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