在 AWS s3 上删除 Delta Lake 分区的正确方法

Correct Method to Delete Delta Lake Partion on AWS s3

我需要删除带有关联 AWS s3 文件的 Delta Lake 分区,然后需要确保 AWS Athena 显示此更改。目的是因为我需要重新运行一些代码来重新填充数据。

我试过了

deltaTable = DeltaTable.forPath(spark, path)
deltaTable.delete("extract_date = '2022-03-01'") #extract date is the partition

它完成且没有错误,但 s3 上的文件仍然存在,即使在 运行 MSK REPAIR TABLE 删除后,Athena 仍然显示数据。有人可以建议删除分区和更新 Athena 的最佳方法吗?

虽然你执行了删除操作,但数据还在,因为Delta表有历史记录,只有当你执行VACUUM operation时才会真正删除数据,操作时间会早于默认保留期(7天)。如果你想更快地删除数据,那么你可以 运行 带有参数 RETAIN XXX HOURS 的 VACUUM 命令,但这可能需要设置一些额外的属性来强制执行 - 请参阅文档以获取更多详细信息。

将添加到 Alex 的答案中,如果您想将保留期缩短到 7 天以下,则必须更改配置 属性:spark.databricks.delta.retentionDurationCheck.enabled to false.

来自原始文档:

Delta Lake has a safety check to prevent you from running a dangerous VACUUM command. If you are certain that there are no operations being performed on this table that take longer than the retention interval you plan to specify, you can turn off this safety check by setting the Spark configuration property spark.databricks.delta.retentionDurationCheck.enabled to false.