我们在 dbt 云配置中有一个模型,其中 Spark 在 AWS EMR 上运行,并以 Iceberg 作为目标表类型。
目前我们已经设置了配置:materialized: 'table',每次模型运行时,它都会在 s3 存储桶中创建输出文件,而不会删除或覆盖上次运行中创建的文件。
有人可以请教如何在 dbt Spark 模型中配置以在每次运行时删除与 s3 存储桶中先前执行相关的输出文件吗?
期望:对于每个模型运行,上次运行时存储在 s3 存储桶中的输出文件应被删除
使用这些现代数据格式,尽量不要关心文件本身 - 它们由引擎(例如 EMR)管理。
Iceberg 和 Delta 等格式的一个好处是它们保留底层数据文件以及跟踪更改的“日志”。然后,您就可以“回到过去”到表的先前状态。这是因为它保留了所有历史数据。
如果您不希望保留历史数据(这意味着您将无法进行时间旅行),您可以将表配置为使快照过期。
对 Iceberg 表的每次写入都会创建表的新快照或版本。快照可用于时间旅行查询,或者表可以回滚到任何有效的快照。
快照会累积,直至通过
操作过期。建议定期创建过期快照,以删除不再需要的数据文件,并保持表元数据的大小较小。expireSnapshots