我正在使用 delta Lake ("io.delta" %% "delta-core" % "0.4.0") 并合并到 foreachBatch 中,例如:
foreachBatch { (s, batchid) =>
deltaTable.alias("t")
.merge(
s.as("s"),
"s.eventid = t.eventid and t.categories in ('a1', 'a2')")
.whenMatched("s.eventtime < t.eventtime").updateAll()
.whenNotMatched().insertAll()
.execute()
}
增量表按类别进行分区。如果我在('a1','a2')'中添加像'and t.categories'这样的分区过滤器,从火花图中我可以看到输入不是整个表。我认为它做了分区修剪。但是,如果我这样做:“s.eventid = t.eventid and t.categories=s.categories”,它仍然会从增量表中加载所有数据。我希望它可以自动感知应该去哪些分区进行连接,有点下推。是否可以在不指定特定分区值的情况下进行分区修剪?我也尝试添加 ("spark.databricks.optimizer.dynamicPartitionPruning","true") 但不起作用。
谢谢