尝试在 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 中实现并行性的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 node-redshift 从节点连接到 redshift 时超时