拆分文件 - Redshift 复制命令

Posted

技术标签:

【中文标题】拆分文件 - Redshift 复制命令【英文标题】:Split Files - Redshift Copy Command 【发布时间】:2020-06-11 15:12:12 【问题描述】:

你好,

我想知道上图中的选项 A 是否是问题的有效答案,为什么选项 C 不正确。

根据documentation on splitting data into multiple files:

将数据拆分为文件,使文件数是集群中切片数的倍数。这样一来,Amazon Redshift 就可以在切片之间平均分配数据。每个节点的切片数量取决于集群的节点大小。例如,每个 DS2.XL 计算节点有两个 slice,每个 DS2.8XL 计算节点有 32 个 slice。有关每个节点大小的切片数量的更多信息,请参阅 Amazon Redshift 集群管理指南中的关于集群和节点。

不应该选项 C,将数据分成 10 个大小相等的文件是正确的答案吗?

【问题讨论】:

【参考方案1】:

“A”是正确的,因为 S3 的性质。 S3 需要时间来“查找”您正在访问的对象,然后将数据传输给请求者。这个“查找”时间大约为 0.5 秒。并且可以在这段时间内传输大量数据。最坏的情况(我已经看到了)是将数据分解为每行数据一个 S3 对象。这意味着大部分 COPY 时间将处于“查找”时间,而不是传输时间。我自己对此的分析(几年前)表明,100MB 的对象将花费不到 50% 的 COPY 时间用于对象查找。因此 1GB 可能是一个很好的安全且经得起未来考验的大小目标。

“C”是错误的,因为您希望在 COPY 期间发生尽可能多的独立并行 S3 数据传输(在合理和网卡带宽范围内)。由于 Redshift 将在每个切片中启动一个 S3 对象,并且在 Redshift 中每个节点有多个切片。对于小型节点类型,切片的最小数量是 2,因此您需要至少 20 个 S3 对象,对于较大的节点类型需要更多。

将这些组合起来,您需要很多 S3 对象,但不需要很多小 (

【讨论】:

【参考方案2】:

这不是正确答案,因为

除非您知道输出文件(组合)的确切大小,否则您将无法准确拆分为 10,如果这样做,redshift 可能会逐个文件写入,因此卸载速度会很慢 这不是最佳选择,因为您拥有的文件越小越好,因为您将在卸载和复制时利用红移集群中的所有核心/节点,如果您需要再次加载此数据

【讨论】:

谢谢,有道理!

以上是关于拆分文件 - Redshift 复制命令的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 文件加载到 Redshift

将JSON文件加载到Redshift

使用复制命令将 Json 文件加载到 redshift

如何从本地安装的 spark 连接到 aws-redshift?

使用 COPY 功能自动将数据加载到 Redshift

Redshift 复制命令递归扫描