需要一种优雅的方式将 Delta Lake 回滚到以前的版本。
我目前的方法如下:
import io.delta.tables._
val deltaTable = DeltaTable.forPath(spark, testFolder)
spark.read.format("delta")
.option("versionAsOf", 0)
.load(testFolder)
.write
.mode("overwrite")
.format("delta")
.save(testFolder)
但这很丑陋,因为整个数据集需要重写。似乎一些元更新就足够了,不需要数据 I/O。有人知道更好的方法吗?
从 Delta Lake 0.7.0 开始,您可以使用以下命令回滚到 Delta Lake 表的早期版本RESTORE command https://docs.databricks.com/delta/delta-utility.html#restore-a-delta-table-to-an-earlier-state。这是使用时间旅行回滚表的更简单的方法。
Scala:
import io.delta.tables._
val deltaTable = DeltaTable.forPath(spark, "/path/to/delta-table")
deltaTable.restoreToVersion(0)
Python:
from delta.tables import *
deltaTable = DeltaTable.forPath(spark, "/path/to/delta-table")
deltaTable.restoreToVersion(0)
SQL:
RESTORE TABLE delta.`/path/to/delta-table` TO VERSION AS OF 0
您还可以使用restoreToTimestamp
命令(如果您更愿意这样做)。阅读文档 https://docs.databricks.com/delta/delta-utility.html#restore-a-delta-table-to-an-earlier-state更多细节。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)