gpt4 book ai didi

amazon-s3 - 仅将新文件从 S3 加载到 Redshift 的简单方法?

转载 作者:行者123 更新时间:2023-12-01 11:33:18 25 4
gpt4 key购买 nike

Redshift COPY 命令的文档指定了两种选择要从 S3 加载的文件的方法,您可以提供一个基本路径并加载该路径下的所有文件,或者您指定一个包含要加载的特定文件的 list 文件。

然而,在我们的案例中,我认为这很常见,S3 存储桶会定期接收包含更新数据的新文件。我们希望能够仅加载尚未加载的文件。

鉴于有一个表 STL_file_scan 记录了从 S3 加载的所有文件,最好以某种方式排除那些已成功加载的文件。这似乎是一个相当明显的功能,但我在文档或网上找不到任何关于如何执行此操作的信息。

甚至 AWS Data Pipeline 中的 Redshift S3 加载模板似乎也通过将所有数据(新的和旧的)加载到临时表,然后与目标表进行比较/更新插入来管理此场景。当我们可以从文件名中预先知道一个文件已经被加载时,这似乎是一个疯狂的开销。

我知道我们可能可以将已经加载的文件从存储桶中移出,但是我们不能这样做,这个存储桶是另一个不属于我们自己的进程的最终存储位置。

我能想到的唯一替代方法是运行其他一些进程来跟踪已成功加载到 redshift 的文件,然后定期将其与 s3 存储桶进行比较以确定差异,然后在触发复制之前将 list 文件写入某处过程。但多么痛苦啊!我们需要一个单独的 ec2 实例来运行该进程,该进程将拥有自己的管理和操作开销。

一定会有更好的办法!

最佳答案

我是这样解决问题的

S3 -- (Lambda Trigger on新创建的日志) -- Lambda -- Firehose -- Redshift

它适用于任何规模。负载越大,对 Lambda 的调用越多,向 firehose 发送的数据越多,一切都会自动处理。

如果文件格式有问题,您可以配置死信队列,事件将发送到那里,您可以在修复 lambda 后重新处理。

关于amazon-s3 - 仅将新文件从 S3 加载到 Redshift 的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30240681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com