【问题标题】:Can we delete latest version of delta table in the delta lake?我们可以删除 delta 湖中最新版本的 delta 表吗?
【发布时间】:2021-04-13 22:03:53
【问题描述】:

我有一个包含 4 个版本的增量表。

DESCRIBE HISTORY cfm ---> 有 4 个版本。 0,1,2,3。

我想删除版本 3 或 2。 我怎样才能做到这一点?

我试过了

from delta.tables import *
from pyspark.sql.functions import *

deltaTable = DeltaTable.forPath(spark, "path of cfm files")

deltaTable.delete("'version' = '3'") 

这不会删除版本 3。 https://docs.delta.io/0.4.0/delta-update.html

“delete 会从 Delta 表的最新版本中删除数据,但不会将其从物理存储中删除,直到旧版本被显式清除”

如果我必须运行真空命令,如何在最新日期而不是旧日期使用它们。

【问题讨论】:

    标签: python pyspark delta-lake


    【解决方案1】:

    您需要使用 vaccum 命令来执行此操作。但是,vaccum 的默认保留时间为 7 天,如果您尝试在 7 天内清空任何内容,则会出错。

    我们可以通过设置绕过默认保留期检查的 spark 配置来解决此问题。

    以下解决方案:

    from delta.tables import *
    
    spark.conf.set("spark.databricks.delta.retentionDurationCheck.enabled", "false")
    deltaTable = DeltaTable.forPath(spark, deltaPath)
    deltaTable.vacuum(24)
    

    *deltaPath -- 是您的增量表的路径

    *24 -- 表示保留版本控制的小时数,过去 24 小时后创建的任何版本都将被删除。

    希望这能回答你的问题。

    【讨论】:

    • 这将删除在 24 个版本之前创建的所有版本。我的问题是我们是否可以只删除最新版本而保持旧版本不变?
    • 它将删除在 24 'hours' 之前创建的任何版本,而不是版本。因此,如果您只需要保留最新版本 - 确定每次更新发生在表上的时间间隔是多少,并将该时间间隔设置为 24。例如,如果您的表每 1 小时更新一次,您只需要最新的,将数字设置为一。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 2021-04-15
    • 2019-06-24
    • 1970-01-01
    相关资源
    最近更新 更多