检查路径上是否存在增量表

问题描述 投票:0回答:3

在加载之前,我需要从 delta-lake 表中删除某些数据。如果存在,我可以从增量表中删除数据,但当表不存在时,它会失败。

下面是 Databricks scala 代码

// create delete statement
val del_ID = "Check_ID =" + "123"

// get delta table from path where data exists
val deltaTable = DeltaTable.forPath(spark, path)

// delete data from delta table
deltaTable.delete(del_ID)

上述代码仅当增量数据存在于该路径上时才有效,否则将失败。

有人可以分享一种方法,如果增量数据存在,则执行删除语句,否则删除语句将被忽略?

scala databricks delta-lake
3个回答
18
投票

根据DeltaTable的Javadoc,您可以使用以下命令检查指定路径中是否存在增量表:

DeltaTable.isDeltaTable(spark, "path/to/table")

如果路径不包含增量表或者不存在,则返回 false。所以你的代码是:

val del_ID = "Check_ID ="+ "123" 
if (DeltaTable.isDeltaTable(spark, path)) {
  DeltaTable.forPath(spark, path).delete(del_ID)
}

10
投票

在 python 中使用 Spark SQL API 的另一种方法:

spark.sql(f'describe detail {path}').collect()[0].asDict()['format'] == 'delta'

当您无法使用 Delta API(如 databricks-connect 中)时,这会很方便。


0
投票

可以检查catalog的information_schema中是否存在该表。该查询的结果(参见下面的 result_df)将是一个空表(如果这样的表不存在),或者是一个包含行的表。之后,您使用“if”应用逻辑 - 如果 result_df 不为空 - 执行某些操作,删除表等,否则执行其他操作。

如果您直接使用下面的代码,请不要忘记将“some_catalog_name”替换为您的目录名称,并将“您检查是否存在的表”替换为您的表名称。

result_df = spark.sql(f'SELECT * FROM some_catalog_name.information_schema.tables WHERE table_name = "the table you check if exists"')

if not (result_df.isEmpty()):
    do something ...
else:
    do something else ...
© www.soinside.com 2019 - 2024. All rights reserved.