在databricks中加载delta表特定分区的最佳实践是什么



我想知道加载delta表特定分区的最佳方式是什么?选项2是否在筛选之前加载所有表?

选项1:

df = spark.read.format("delta").option('basePath','/mnt/raw/mytable/')
.load('/mnt/raw/mytable/ingestdate=20210703')

(这里需要basePath选项吗?(

选项2:

df = spark.read.format("delta").load('/mnt/raw/mytable/')
df = df.filter(col('ingestdate')=='20210703')

非常感谢!

在第二个选项中,spark只加载过滤器条件中提到的相关分区,内部spark执行partition pruning,并且只加载源表中的相关数据。

而在第一个选项中,您直接指示spark只加载定义的相应分区。

因此,在这两种情况下,最终都只加载各自的分区数据。

如果您的表已分区,并且您只想读取一个分区,则可以使用进行操作,其中

val partition = "year = '2019'"

val df = spark.read
.format("delta")
.load(path)
.where(partition)

最新更新