AWS Glue 和重复数据删除增量 CSV 文件

Posted

技术标签:

【中文标题】AWS Glue 和重复数据删除增量 CSV 文件【英文标题】:AWS Glue & Deduplicating Incremental CSV Files 【发布时间】:2018-07-24 18:59:40 【问题描述】:

我每天将 csv 文件交付到 S3,这些文件在当月是增量的。所以 file1 包含第 1 天的数据,file2 包含第 1 天和第 2 天的数据,等等。每天我想对该数据运行 ETL 并将其写入不同的 S3 位置,以便我可以使用 Athena 查询它没有重复的行。本质上,我只想查询聚合数据的最新状态(这只是最近交付给 S3 的文件的内容)。

我不认为书签会起作用,因为增量交付包含以前文件中的数据,因此会产生重复。我知道如果我在源存储桶中的所有文件上运行,我可以转换为数据框并删除这样的重复项:

spark_df = resolvechoice2.toDF()
spark_df = spark_df.dropDuplicates()

但这似乎会给我增加很多处理,以便每次对源表中的所有数据运行 ETL。

基本工作流程类似于交付新文件,可能使用 Lambda 启动 AWS Glue 作业,该作业仅处理该文件的内容,然后替换输出存储桶的内容。输出桶按年和月分区。

最简单的方法是启用书签并在每次运行时删除输出存储桶中的所有内容吗?

【问题讨论】:

【参考方案1】:

如果您的文件位于单独的文件夹中,您可以使用 Athena 的 EXTERNAL TABLE 并每天指向当前分区(例如,使用 Lambda): - 删除指向昨天文件夹的分区 - 添加指向今天文件夹的分区 - 在月底,您将分区指向最后一天(包含整个月的数据)。

这样您就不需要任何重复数据删除过程,您只需管理您的 Athena 分区。

【讨论】:

我的问题是,正在交付的文件在文件名或路径中没有说明它涵盖的“日期”,并且可以在第二天交付。因此,在源端,我没有很好的方法来指示和选择分区。不过,感谢这些想法,我可以使用分区和特定文件输入周围的一些东西。

以上是关于AWS Glue 和重复数据删除增量 CSV 文件的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark 数据框删除 AWS Glue 脚本中的重复项

AWS Glue to Redshift:是不是可以替换、更新或删除数据?

如何使用 AWS Glue 将许多 CSV 文件转换为 Parquet

AWS Glue - 从 sql server 表中读取并作为自定义 CSV 文件写入 S3

AWS Glue 数据目录的头文件

AWS Glue Crawler无法提取CSV标头