重要
本文档已过时,将来可能不会更新。 本内容中提及的产品、服务或技术不再受支持。 请参阅 Azure Databricks 上的 ACID 保证是什么?。
Databricks DBIO 包为 Apache Spark 作业提供了对云存储的事务性写入。 这解决了在云原生设置中使用 Spark(例如,直接写入存储服务)时发生的许多性能和正确性问题。
重要
使用以 *
结尾的路径访问数据时,将不遵循提交协议。 例如,读取 dbfs:/my/path
将只返回已提交的更改,而读取 dbfs:/my/path/*
将返回目录中所有数据文件的内容,不管这些文件的内容是否已提交。 这是预期的行为。
使用 DBIO 事务提交,以 _started_<id>
和 _committed_<id>
开头的元数据文件将伴随着 Spark 作业创建的数据文件。 通常不应直接更改这些文件。 而应使用 VACUUM
命令将其清除。
若要清除 Spark 作业遗留的未提交文件,请使用 VACUUM
命令将其删除。 通常,VACUUM
在 Spark 作业完成后自动执行,但如果作业中止,你也可以手动运行该命令。
例如,VACUUM ... RETAIN 1 HOUR
会删除一小时前的未提交文件。
重要
- 请避免在不到一小时的时间内执行 vacuum 命令。 这可能会导致数据不一致。
另请参阅 VACUUM。
-- recursively vacuum an output path
VACUUM '/path/to/output/directory' [RETAIN <N> HOURS]
-- vacuum all partitions of a catalog table
VACUUM tableName [RETAIN <N> HOURS]
// recursively vacuum an output path
spark.sql("VACUUM '/path/to/output/directory' [RETAIN <N> HOURS]")
// vacuum all partitions of a catalog table
spark.sql("VACUUM tableName [RETAIN <N> HOURS]")