如何在AWS上对S3数据运行删除和插入查询

问题描述

所以我有一些有关S3的.csv / .parquet格式的历史数据。每天,我都会运行批处理作业,这为我提供了2个文件,这些文件包含需要从历史快照中删除的数据列表以及需要插入到历史快照中的新记录。我无法在雅典娜上运行插入/删除查询。我必须执行哪些解决方案(具有成本效益并由A​​WS管理)?

解决方法

Amazon S3中的对象不可变。这意味着可以替换,但不能对其进行编辑。

Amazon Athena,Amazon Redshift Spectrum和Hive / Hadoop可以查询存储在Amazon S3中的数据。他们通常会在提供的路径中查找并加载该路径下的所有文件,包括子目录。

要将数据添加到此类数据存储中,只需在给定路径中上传其他对象

要删除一个对象中的所有数据,请删除该对象

但是,如果要删除对象中的数据 ,则需要用删除了这些行的新对象替换该对象。必须在S3之外的中完成该操作。 Amazon S3无法编辑对象的内容。

请参阅:AWS Glue adds new transforms (Purge,Transition and Merge) for Apache Spark applications to work with datasets in Amazon S3

Data Bricks有一个名为Delta Lake的产品,可以在查询工具和Amazon S3之间添加一个附加层:

Delta Lake是一个开源存储层,可为数据湖带来可靠性。 Delta Lake提供ACID事务,可伸缩的元数据处理,并统一流和批处理数据处理。 Delta Lake在您现有的数据湖之上运行,并且与Apache Spark API完全兼容。

Delta Lake supports deleting data from a table,因为它位于“ Amazon S3前面”。