有没有办法通过数据管道以预定义的顺序将文件从 S3 复制到红移

Posted

技术标签:

【中文标题】有没有办法通过数据管道以预定义的顺序将文件从 S3 复制到红移【英文标题】:Is there any way to copy files from S3 to redshift through a datapipeline in a predefined order 【发布时间】:2018-02-20 19:34:39 【问题描述】:

我想知道是否有一种方法可以设置通过 S3 的数据管道将文件加载到 redshift 中的顺序。我知道我们可以使用清单来指定文件,但没有找到任何关于文件加载顺序的信息。

例如,我的 s3 文件夹 1 有 10 个文件。在数据管道中,我将它设置为这个文件夹,但是如果可以的话,我如何设置这些文件的加载顺序。

简而言之,据我了解,在被数据管道消耗的同时,无法以预定义的顺序加载文件。如果我错了,任何人都可以纠正我。

我正在考虑可能有多个源文件并且它们可以具有重复行但具有不同值的情况。在这种情况下,使用文件的顺序很重要。

例如,File1、File2 是数据管道计划的一部分,如果这两个文件都有一个名为 xyz 的共同客户条目。 File1 xyz Cost_owed 1000,File2 xyz Cost_owed 500。所以实际上客户 xyz 只欠 500,但由于我使用删除和插入模式,文件的顺序在这里很重要。因此,我的 redshift 表最终可能会有一个 xyz 条目为 1000 OR 500 ,在这种特定情况下或任何其他情况下,文件的顺序很重要。或者如果是这样,是否应该以任何其他方式处理, 你能给我一些想法吗?

谢谢

【问题讨论】:

【参考方案1】:

文件的顺序对于 Redshift 中的 COPY 命令无关紧要,因为它是一个 MPP 系统。

Redshift 依赖目标表的 SORTKEY 来强制排序。

【讨论】:

基本上 datapipeline 没有办法按预定义的顺序加载数据吧? 从表面上看你是对的,但是很可能有依赖于加载顺序的下游进程。一个示例可能是带有 default = getdate() 的列,然后是根据该时间戳解析数据的后续进程。

以上是关于有没有办法通过数据管道以预定义的顺序将文件从 S3 复制到红移的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法从 Alexa localisation.js 文件中存储在 s3 中的文本文件中获取字符串(数据)?

我可以将管道分隔的文本文件直接加载到 Redshift

如何将档案 (zip) 通过管道传输到 S3 存储桶

Spark s3 csv文件读取顺序

递归地将数据从 redshift 卸载到 S3 存储桶

AWS Data管道从S3到DynamoDB的CSV数据