【问题标题】:How to check Redshift COPY command performance from AWS S3?如何从 AWS S3 检查 Redshift COPY 命令性能?
【发布时间】:2019-11-10 16:59:26
【问题描述】:

我正在开发一个应用程序,我将在其中将数据加载到 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 表中的近似性能指标,以便我可以在移动之前决定是否继续拆分文件红移

【问题讨论】:

  • 您真正关心的是什么?您是否需要在特定时间范围内加载文件?你多久做一次这个负载? (每天一次,每小时一次,每分钟一次?)你说你想提高性能,但是你目前加载一个简单表的性能是多少?如果您想“提高”性能,那么您应该从测量当前性能开始。 1000 行的文件对于 Redshift 来说非常小。
  • 我将以每分钟 10 次迭代的速度加载文件。我什至没有测试当前的性能。我只是在想是否值得将文件分成多个文件进行处理,或者只继续处理单个文件,因为@Nathan 澄清的每个文件最多只有 1000 行。
  • “以每分钟 10 次迭代的速度加载文件”是什么意思?您想以每分钟 10 次的速度加载所有 20 个表吗?如果是这样,这听起来不像是使用 Redshift 的可行方法。
  • 是的。我将在每次迭代中创建 20 个新文件并将它们插入到 Redshift 表中。
  • 在哪里可以找到高效的解决方案?

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


【解决方案1】:

您还应该阅读加载数据 - 最佳实践指南中的建议: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 ...这是所有节点都在并行进行最大工作。

也就是说,20,000 行对于 Redshift 而言是如此少量的数据,我不确定任何进一步的优化是否会对您目前的流程速度产生重大影响。

【讨论】:

  • 我还需要加载所有特定于单个节点上的迭代的文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-24
  • 1970-01-01
  • 1970-01-01
  • 2017-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多