检查数据块中的路径上是否存在增量表

VNK*_*VNK 11 scala databricks delta-lake

在加载之前,我需要从 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)
Run Code Online (Sandbox Code Playgroud)

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

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

Vin*_*oba 18

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

DeltaTable.isDeltaTable(spark, "path/to/table")
Run Code Online (Sandbox Code Playgroud)

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

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


ays*_*ysa 10

在 python 中使用 Spark SQL API 的其他方法:

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

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