S3避免加载重复文件

时间:2018-10-03 12:07:26

标签: amazon-web-services amazon-s3

我有以下工作流程。 我需要在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中。

1 个答案:

答案 0 :(得分:1)

您可以在redshift中(或其他任何实际位置,如MySQL或dynamodb)添加另一个表,该表将包含上载文件的Etag / md5哈希。

您可能已经有一个脚本,该脚本每4小时运行一次,并将数据加载到redshift中。在同一脚本中,将数据成功加载到redshift后;只需在此表中输入一个即可。另外,在将数据加载到Redshift之前,请检查同一脚本(来自该新表)的检查。

您需要确保使用已加载到redshift中的所有文件的Etag加载此新表。