ETL管道在AWS与S3作为datalake如何处理增量更新

问题描述:

我在AWS设置ETL管道如下ETL管道在AWS与S3作为datalake如何处理增量更新

input_rawdata - > S3 - >拉姆达 - >触发火花ETL(通过AWS胶)脚本 - >输出(s3,parquet文件)

我的问题是让我们假设上面是数据的初始负载,我该如何设置运行每天(或每小时)增加新行或更新现有记录的增量批次

a。)我如何继续添加到相同的s3镶木地板文件。以便随后的presto db查询产生最新的数据。

b。)如何处理重复记录获取查询的最新时间戳。

在火花脚本中,我是否需要创建Hive外部表,其源代码为s3并在presto db中使用?

感谢您的任何输入。

首先不要试图追加到s3中存在的文件,而是创建具有多个记录的文件。

要查询s3的分析,您可以使用AWS Athena来描述数据,其数据目录是Hive Metastore兼容的。

要删除重复项,您可以通过Athena编写SQL查询来查询唯一记录集。

您可以在ETL作业中定义作业书签。

书签保留了s3文件处理的轨迹,所以一旦您的历史负载得到处理,并且您在s3上转储新文件,那么只有新文件将由etl作业处理,并将这些文件标记为在内部处理。

你可以用这种方式处理增量数据。

由于您已经在使用Lambda和Glue,因此您可以使用Kinesis和KCL以流的形式捕获数据,或使用Spark Streaming,因为您有Spark脚本。这些选项都可以为您提供您正在寻找的增量输入。将实时流传输到现有数据库时,数据损坏的风险较低。

然后你可以通过你的ETL过程与胶水传递数据。您可以在Glue中安排或链接ETL作业,并且可以将转换后的数据加载到AWS存储桶中。 Glue是面向批处理的,但最小间隔时间为5分钟,并且Kinesis执行第一步,然后将完成的数据传递给Glue,您仍然可以进行增量更新。你可以查看这个获得更多的资源和想法ETL architecture

对于任何重复数据,如果需要,可以在已完成的数据集上运行SQL-ish查询。