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

San*_*rya 2 amazon-s3 amazon-web-services amazon-dynamodb amazon-redshift

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

Joh*_*ein 6

Amazon S3 中的对象是不可变的。这意味着它们可以被替换,但不能被编辑。

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

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

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

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

请参阅:AWS Glue 为 Apache Spark 应用程序添加了新的转换(清除、转换和合并)以处理 Amazon S3 中的数据集

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

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

Delta Lake支持从表中删除数据,因为它位于 Amazon S3“前面”。