AWS中的ETL管道以s3作为datalake如何处理增量更新

时间:2017-09-06 04:23:43

标签: amazon-web-services amazon-s3 etl amazon-data-pipeline aws-glue

我在AWS中设置了ETL管道,如下所示

input_rawdata - > s3 - > lambda - >触发spark etl脚本(通过aws胶水) - >输出(s3,镶木地板文件)

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

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

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

在spark脚本中,我是否需要创建一个源为s3的Hive外部表并在presto db中使用?

感谢任何输入。

4 个答案:

答案 0 :(得分:2)

Apache Hudi将是一个很好的工具:https://hudi.incubator.apache.org/ 您可以使用以Parquet格式存储在S3中的数据对表进行upsert,并且Presto与之兼容。 例如,在EMR 5.28中,已经安装了Hudi,您可以使用Hive,Spark和Presto查询Hudi数据集。

答案 1 :(得分:1)

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

书签可以处理s3文件的处理,因此一旦处理了历史加载,并且在s3上转储新文件,那么只有新文件将由etl作业处理并将这些文件标记为内部处理。

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

答案 2 :(得分:0)

首先,不要尝试追加s3中存在的文件,而是创建包含多条记录的文件。

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

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

答案 3 :(得分:0)

现在,您可以使用Delta使用see this在数据上进行补高,追加和增量调整。使用此工具,您可以以“增量”格式(火花+元数据文件)写入数据。您甚至可以恢复或查询某个时间点的数据。请注意,由于您需要创建清单,所以最近它与Athena / Presto尚未完全配合使用(开源)。