小编pro*_*add的帖子

Spark Delta Lake 合并上的分区修剪

我正在使用 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()
      }
Run Code Online (Sandbox Code Playgroud)

增量表按类别进行分区。如果我添加分区过滤器,例如“and t.categories in ('a1', 'a2')”,从火花图中我可以看到输入不是整个表。我认为它做了分区修剪。但是,如果我这样做:“s.eventid = t.eventid and t.categories=s.categories”,它仍然会加载增量表中的所有数据。我希望它能够自动感知应该去哪些分区进行连接,类似于下推。是否可以在不指定特定分区值的情况下进行分区修剪?我还尝试添加 ("spark.databricks.optimizer.dynamicPartitionPruning","true") 但不起作用。

谢谢

apache-spark delta-lake

6
推荐指数
1
解决办法
6349
查看次数

标签 统计

apache-spark ×1

delta-lake ×1