Unload:
1. Redshift中没有明确写明性能控制,但是使用Parquet文件格式,会比使用CSV格式等文本文件,卸载速度提高2倍[1].
2. 建议在unload select语句中,select query加上order by. 这个操作会让数据在后续重新加载的时候提升速度。
3. 默认情况下,UNLOAD 为每个切片写入一个或多个文件,旨在使用并行处理。我也测试了 parallel参数,在我的测试中,加了parallel off的unload语句明显会比不加parallel off要慢。
4. 如果不指定maxfilesize, 那么默认最大文件大小为6.2G. maxfilesize参数范围是5M到6.2G,如果这个值设置较小的话,会明显减慢unload的执行速度。
Copy:
1. 需要注意的是,根据文档[2], 从单个文件加载数据会迫使 Redshift 执行串行化加载,这比并行加载慢得多。如果您使用多个并发 COPY 命令从多个文件加载一个表,系统会强制 Amazon Redshift 执行序列化加载。
因此,如果我们需要将多个文件加载到单个表,我们应该使用单个COPY命令来执行表,而不是使用多个COPY命令并行执行。Redshift Copy本就自动并行化摄取数据,单个COPY命令已经可以将数据批量加载到表中。
2. 根据Best Practice, 为保证集群资源的最佳使用,Copy 加载的数据文件应该被放置到多个大小均匀的文件中。 在分割数据文件时,请确保它们的大小基本相等——压缩后应在1 MB 到1 GB 之间。[3]
同时,文件的数量最好是集群中分片的倍数,这样可以保证每个compute节点均执行Copy操作。[3]
3. 根据文档[3], 强烈建议使用 gzip 、 lzop 或 bzip2 对加载文件进行单独压缩,以有效地加载大型数据集。
参考文档:
[1] https://docs.amazonaws.cn/redshift/latest/dg/r_UNLOAD.html
[2] https://docs.aws.amazon.com/zh_cn/redshift/latest/dg/c_best-practices-single-copy-command.html
[3] https://aws.amazon.com/cn/blogs/china/top-8-best-practices-for-high-performance-etl-processing-using-amazon-redshift/