Apache spark 火花结构Delta流情况下的下推滤波器
我有一个用例,在这个用例中,我们需要将开源增量表流式传输到多个查询中,并在其中一个分区列上进行过滤。 如,。 给定按年份列分区的增量表Apache spark 火花结构Delta流情况下的下推滤波器,apache-spark,delta-lake,Apache Spark,Delta Lake,我有一个用例,在这个用例中,我们需要将开源增量表流式传输到多个查询中,并在其中一个分区列上进行过滤。 如,。 给定按年份列分区的增量表 Streaming query 1 spark.readStream.format("delta").load("/tmp/delta-table/"). where("year= 2013") Streaming query 2 spark.readStream.format("delta
Streaming query 1
spark.readStream.format("delta").load("/tmp/delta-table/").
where("year= 2013")
Streaming query 2
spark.readStream.format("delta").load("/tmp/delta-table/").
where("year= 2014")
物理计划显示流式传输后的过滤器
> == Physical Plan == Filter (isnotnull(year#431) AND (year#431 = 2013))
> +- StreamingRelation delta, []
我的问题是,下推谓词是否适用于Delta中的流式查询?
我们是否可以从增量中只传输特定的分区?如果列已经分区,则只扫描所需的分区 让我们创建分区和非分区增量表,并执行结构化流
> == Physical Plan == Filter (isnotnull(year#431) AND (year#431 = 2013))
> +- StreamingRelation delta, []
分区增量表流:
val spark = SparkSession.builder().master("local[*]").getOrCreate()
spark.sparkContext.setLogLevel("ERROR")
import spark.implicits._
//sample dataframe
val df = Seq((1,2020),(2,2021),(3,2020),(4,2020),
(5,2020),(6,2020),(7,2019),(8,2019),(9,2018),(10,2020)).toDF("id","year")
//partionBy year column and save as delta table
df.write.format("delta").partitionBy("year").save("delta-stream")
//streaming delta table
spark.readStream.format("delta").load("delta-stream")
.where('year===2020)
.writeStream.format("console").start().awaitTermination()
df.write.format("delta").save("delta-stream")
spark.readStream.format("delta").load("delta-stream")
.where('year===2020)
.writeStream.format("console").start().awaitTermination()
上述流式查询的物理计划:请注意partitionFilters
非分区增量表流:
val spark = SparkSession.builder().master("local[*]").getOrCreate()
spark.sparkContext.setLogLevel("ERROR")
import spark.implicits._
//sample dataframe
val df = Seq((1,2020),(2,2021),(3,2020),(4,2020),
(5,2020),(6,2020),(7,2019),(8,2019),(9,2018),(10,2020)).toDF("id","year")
//partionBy year column and save as delta table
df.write.format("delta").partitionBy("year").save("delta-stream")
//streaming delta table
spark.readStream.format("delta").load("delta-stream")
.where('year===2020)
.writeStream.format("console").start().awaitTermination()
df.write.format("delta").save("delta-stream")
spark.readStream.format("delta").load("delta-stream")
.where('year===2020)
.writeStream.format("console").start().awaitTermination()
上述流式查询的物理计划:请注意pushedFilters
您使用的是开源版本还是Databricks版本?OSS中不存在下推过滤器。更新问题以提及开源版本。@AmitJoshi-开源您能告诉我使用的Delta core版本吗?spark 3.0.1和Delta core 0.7.0我不确定,但我看不到推送的过滤器。你能把代码贴在打印执行计划的地方吗。可能对我来说它被截断了。