【发布时间】:2018-10-14 16:10:22
【问题描述】:
我有以下工作流程。 我需要识别 S3 上的重复文件,以避免在我的目的地 (Redshift) 上出现重复。
- 每 4 小时从 FTP 服务器将文件加载到 S3(文件存储结构:年/月/日/小时/分钟/文件名)
- 在拉取所有文件后将 S3 加载到 Redshift(针对该时间间隔)
这是每 4 小时运行一次的连续作业。
问题:
有时,S3 上会出现内容相同但文件名不同的文件。这些文件可以属于不同的时间间隔或不同的日子。例如,如果文件在 2018 年 10 月 1 日到达 one.csv 并包含 1,2.3,4 作为内容,则可能在 2018 年 10 月 10 日到达的文件可能具有相同的内容 1,2,3,4 但具有不同的内容文件名。 如果内容相同,我想避免将此文件加载到 S3。 我知道我可以使用文件哈希来识别两个相同的文件,但我的问题是如何在 S3 上实现这一点,而且还有这么多文件。 最好的方法是什么?
基本上,我想避免将已经存在的数据加载到 S3。
【问题讨论】:
-
我猜 ETag 和尺寸比较会是最快的。 stackoverflow.com/a/37064007。另请阅读如何确保 ETag 计算一致(即上传操作的哪些属性必须保持不变):docs.aws.amazon.com/AmazonS3/latest/API/…
-
也许使用在放入 S3 的文件上触发的 Lambda。检索 etag(或以其他方式计算文件的哈希),然后在 DynamoDB 的“已经看到”表中查找。如果不存在,则将 etag/hash 存储在 DynamoDB 中。如果存在,则删除或以其他方式移动 S3 文件,使其不会加载到 Redshift。我建议将 etags/hash 持久化到 DynamoDB 的原因是查找比列出所有 S3 对象并检索它们的 etags 以进行重复查找要快得多。
标签: amazon-web-services amazon-s3