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

Posted

技术标签:

【中文标题】如何在 AWS 上对 S3 数据运行删除和插入查询【英文标题】:How to run delete and insert query on S3 data on AWS 【发布时间】:2020-08-10 17:07:27 【问题描述】:

所以我有一些 .csv/.parquet 格式的 S3 历史数据。每天我都在运行批处理作业,这给了我 2 个文件,其中包含需要从历史快照中删除的数据列表,以及需要插入历史快照的新记录。我无法在 athena 上运行插入/删除查询。我必须有哪些选项(经济高效并由 aws 管理)来解决我的问题?

【问题讨论】:

请告诉我您的情况是否/如何与链接的答案不同,我们可以重新提出问题。 上述问题是关于在 athena 上运行删除查询,我的问题是关于在 AWS 中更新 S3 数据的选项。可能是 Athena、DynamoDb 等。我不认为这两个是重复的问题。 类似:amazon web services - Can I delete data (rows in tables) from Athena? - Stack Overflow 【参考方案1】:

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 的“前面”。

【讨论】:

以上是关于如何在 AWS 上对 S3 数据运行删除和插入查询的主要内容,如果未能解决你的问题,请参考以下文章

AWS Athena 可以更新或插入存储在 S3 中的数据吗?

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

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

如何使用 AWS RedShift Spectrum 为 S3 存储建模以进行查询

加载文件后如何清理 AWS Firehose 使用的 S3 文件?

AWS:使用从 s3 到 redshift 的复制命令时没有插入任何内容