如何从AWS S3检查Redshift COPY命令性能?

时间:2019-11-10 16:59:26

标签: amazon-s3 amazon-redshift amazon-redshift-spectrum

我正在开发一个将数据加载到 Redshift 的应用程序。

我想将文件上传到 S3 ,并使用 COPY 命令将数据加载到多个表中。

对于每次这样的迭代,我需要将数据加载到大约 20个表中。

我现在正在创建 20个CSV文件,用于将数据加载到 20个表中,其中对于每次迭代,都会加载 20 个创建的文件放入 20个表格。对于下一次迭代,将创建新的 20 CSV文件并将其转储到 Redshift

在我拥有的当前系统中,每个CSV文件最多可以包含 1000行,应将其转储到表中。 20个表的每次迭代最多 20000行

我想进一步提高性能。我经历了https://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-S3.html

在这一点上,我不确定将1个文件加载到1个Redshift表中需要多长时间。将每个文件分割成多个文件并并行加载真的值得吗?

是否有任何来源或计算器可以根据列和行的数量提供大致的性能指标,以将数据加载到 Redshift 表中,以便我甚至在移动之前就可以决定是否继续拆分文件到 Redshift

1 个答案:

答案 0 :(得分:2)

您还应该通读“加载数据-最佳做法”指南中的建议:https://docs.aws.amazon.com/redshift/latest/dg/c_loading-data-best-practices.html

关于并行文件和数据加载的数量,建议是:

  • 从单个文件加载数据会强制Redshift执行 串行加载,比并行加载要慢得多。
  • 应拆分加载数据文件,以使文件大小相等, 压缩后介于1 MB和1 GB之间。为了获得最佳并行度,压缩后的理想大小在1 MB到125 MB之间。
  • 文件数应为您的片数的倍数 集群。

最后一点对于实现最大吞吐量很重要-如果您有8个节点,则需要n * 8个文件,例如16、32、64 ...这样所有节点并行执行最大工作量。

也就是说,从Redshift的角度来看,20,000行是这么少的数据,我不确定任何进一步的优化都会对您目前的流程速度产生重大影响。