amazon-s3 - 将数据导出到本地是否有任何性能方面比通过 s3 卸载 Redshift 更好的选择?
问题描述
我正在开发一个需要将 Redshift 表数据导出到本地单个 CSV 文件的 Spring 项目。目前的做法是:
- 执行 Redshift UNLOAD 通过 JDBC 将跨多个文件的数据写入 S3
- 将上述文件从 S3 下载到本地
- 将它们连接到一个单独的 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 吗?
解决方案
UNLOAD
使用withPARALLEL OFF
参数可以避免将文件连接在一起。它只会输出一个文件。
但是,如果文件大小超过 6.2GB,这将创建多个文件。
通过运行获得更好的性能是值得怀疑的psql
,但如果性能对您很重要,那么您当然可以测试各种方法。
推荐阅读
- java - 如何从 RANDOM 字节数组中创建图像
- r - 使用 base 或 dplyr 在几列上过滤数据框
- python - 迭代Flask中的数组
- c++ - 我想打印一个html页面,我发送文件的url并且需要在没有QPrintDialog的情况下打印出来
- kotlin - Spring JDBC - 带有 Kotlin 的 BeanPropertyRowMapper
- python - Python:超出范围
- python-3.x - Keras Model hdf5 无法转换 Tflite
- python - Python 和 selenium:如何多次更改 Firefox 的配置文件
- python - 如何迭代查询集并附加到字符串
- reactjs - 为什么我的 React 组件进入无限循环?