尝试在 Redshift 中实现并行性

Posted

技术标签:

【中文标题】尝试在 Redshift 中实现并行性【英文标题】:Trying to achieve parallelism in Redshift 【发布时间】:2020-10-21 10:18:11 【问题描述】:

我每小时在 Amazon Redshift 表中提取一些数据。 数据在 S3 存储桶中每小时以单个 .csv 文件的形式提供。

请注意:我的 Redshift 集群有 4 个节点切片。

我在 Redshift 中创建的表确实有 Distribution Key 和 Sort Key。 文件大小每小时不超过 200MB。

现在我的问题是,将数据摄取到 Redshift 表中的最佳做法是什么:

    运行复制命令如下 -

copy my_schema.my_table from 's3://mybucket/table_data.csv' CREDENTIALS 'aws_access_key_id=<MY_ID>;aws_secret_access_key=<SECRET_KEY>' delimiter '|';

    或者,我是否需要任何其他可选参数才能使用 Redshift 并行性的优势。 我知道它的默认并行度是 EVEN。

另外,如果我们使用任何其他方法来摄取数据,是否会对可用存储大小产生任何影响?如果它改善或保持不变。 或者如果我们实施其他方法,我们还能获得什么其他好处。

在这方面寻求您的专家建议。

谢谢

【问题讨论】:

【参考方案1】:

您无法让 Redshift 并行加载单个文件。原因是没有办法可靠地拆分文件,使所有节点都从行首开始读取。

如果您想加快加载速度,您应该将数据分成与切片一样多的部分。有关如何优化COPY 的更多信息,请参阅https://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-S3.html

话虽如此,每小时加载一次 200 MB 数据应该非常快,即使从单个文件中加载也是如此。我认为您不会对此有任何问题,除非确实存在问题,否则您不应该花时间优化它。

【讨论】:

非常感谢西奥!还有一个问题,即使我对此进行了优化并决定通过将文件分成 4 部分来加载数据,然后运行 ​​COPY 命令。这会对总可用存储大小有任何影响吗?目前我的存储空间是 580/640 GB。另一个问题是,将时间戳列指定为 SORT 键是个好主意吗?请帮我!谢谢你。很抱歉问了这些愚蠢的问题。 据我所知,从一个文件或多个文件加载相同的行应该没有区别。使用时间戳作为排序键是个好主意,它是最好的排序键之一,尤其是当您的查询经常查看最新数据时。

以上是关于尝试在 Redshift 中实现并行性的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Redshift 中实现窗口运行中位数?

尝试使用 node-redshift 从节点连接到 redshift 时超时

如何在机器人框架中实现并行执行

DatagGrip 无法识别 Redshift 特定命令

用于将数据从AWS S3加载到Redshift的Python脚本

如何在 shell 中实现并行执行