我正在开发一个需要将Redshift表数据导出到本地单个CSV文件的Spring项目。目前的方法是:
UNLOAD (
'SELECT DISTINCT #{#TYPE_ID}
FROM target_audience
WHERE #{#TYPE_ID} is not null
AND #{#TYPE_ID} != \'\'
GROUP BY #{#TYPE_ID}'
)
TO '#{#s3basepath}#{#s3jobpath}target_audience#{#unique}_'
credentials 'aws_access_key_id=#{#accesskey};aws_secret_access_key=#{#secretkey}'
DELIMITER AS ',' ESCAPE GZIP ;
上述方法一切都很好。但我认为可以通过跳过S3部分并直接从Redshift获取数据到本地来提高整体性能。
在搜索在线资源后,我发现您可以export data from redshift directly through psql或to perform SELECT queries and move the result data myself。但这两种选择都不能通过并行写入来实现Redshift UNLOAD的性能。
那么有什么方法可以模仿UNLOAD并行写入来实现相同的性能而无需经过S3?
答案 0 :(得分:0)
您可以使用UNLOAD
PARALLEL OFF
参数来避免将文件连接在一起。它只输出一个文件。
但是,如果文件大小超过6.2GB,则会创建多个文件。
通过运行psql
来获得更好的性能是值得怀疑的,但如果性能对您很重要,那么您当然可以测试各种方法。
答案 1 :(得分:0)
我们和你在这里做的完全相同。在我们的性能比较中,在我们的用户案例中,它发现在某些情况下几乎相同甚至更好。因此编程和调试很容易。因为实际上只有一步。
//replace user/password,host,region,dbname appropriately in given command
psql postgresql://user:password@xxx1.xxxx.us-region-1.redshift.amazonaws.com:5439/dbname?sslmode=require -c "select C1,C2 from sch1.tab1" > ABC.csv
这使我们能够避免3个步骤,
另一方面也节省了一些成本(S3存储虽然可以忽略不计)。
顺便说一下,pgsql(9.0+)以后,sslcompression
是默认on
。