首页 > 解决方案 > 将数据导出到本地是否有任何性能方面比通过 s3 卸载 Redshift 更好的选择?

问题描述

我正在开发一个需要将 Redshift 表数据导出到本地单个 CSV 文件的 Spring 项目。目前的做法是:

  1. 执行 Redshift UNLOAD 通过 JDBC 将跨多个文件的数据写入 S3
  2. 将上述文件从 S3 下载到本地
  3. 将它们连接到一个单独的 CSV 文件中
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 获取数据到本地来提高整体性能。

搜索了网上资源,发现可以直接通过psql从redshift导出数据,也可以自己执行SELECT查询并移动结果数据。但是,这两个选项都无法通过并行写入超越 Redshift UNLOAD 性能。

那么有什么方法可以模仿 UNLOAD 并行写入来实现相同的性能而无需通过 S3 吗?

标签: amazon-s3amazon-redshift

解决方案


UNLOAD使用withPARALLEL OFF参数可以避免将文件连接在一起。它只会输出一个文件。

但是,如果文件大小超过 6.2GB,这将创建多个文件。

请参阅:卸载 - Amazon Redshift

通过运行获得更好的性能是值得怀疑的psql,但如果性能对您很重要,那么您当然可以测试各种方法。


推荐阅读