检查 delta table 是否存在于路径上或数据块中

check if delta table exists on a path or not in databricks

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

下面的 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)

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

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

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

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

如果路径不包含增量 table 或不存在,它将 return 为假。所以你的代码将是:

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

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

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

当您无法使用 Delta API 时,这会派上用场,如在 databricks-connect 中。