我尝试从ADLS读取Delta格式的数据。我想使用适当的过滤器读取部分数据。在阅读JDBC格式时,同样的方法也适用于我
query = f"""
select * from {table_name}
where
createdate < to_date('{createdate}','YYYY-MM-DD HH24:MI:SS') or
modifieddate < to_date('{modifieddate}','YYYY-MM-DD HH24:MI:SS')
"""
return spark.read
.format("jdbc")
.option("url", url)
.option("query", query)
.option("user", username)
.option("password", password)
.option("driver", "oracle.jdbc.driver.OracleDriver")
.load()
所以我尝试用类似的方式创建使用查询读取delta,但它读取整个表。
return spark.read
.format("delta")
.option("query", query)
.load(path)
如果不阅读完整的df并过滤它,我如何解决这个问题?
提前感谢!
Spark使用一种称为谓词下推的功能来优化查询。在第一种情况下,过滤器可以传递到oracle数据库。
德尔塔不是这样运作的。可以通过数据跳过和Z排序进行优化,但由于您本质上是在查询镶木地板文件,因此必须读取内存中的所有文件,然后进行过滤。