Databricks视图查询疑问:WHERE过滤是否优先于视图全量生成?
Databricks视图查询的执行逻辑解析
在Databricks(基于Spark引擎)中,不会先生成完整视图结果再执行过滤,Spark的Catalyst查询优化器会自动做谓词下推优化,把终端查询里的Client = 'my_client'和Location = 'my_location'过滤条件提前到关联操作前执行,具体流程如下:
- 第一步:先在
trips表中过滤出满足Client = 'my_client' and Location = 'my_location'的行(仅处理3万行数据中的匹配部分,数据量极小) - 第二步:用过滤后得到的
Start和End时间范围,匹配metrics表的Timestamp字段,完成关联操作 - 第三步:返回最终符合条件的结果
这种优化完全避免了生成全量视图中间结果的开销,性能和直接编写包含过滤+关联的原生SQL几乎一致。只要视图定义没有使用会阻断谓词下推的特殊操作(比如自定义UDF、复杂聚合逻辑等),该优化就会自动生效。
内容的提问来源于stack exchange,提问作者FrancoisDuCoq
相关产品推荐
相关产品推荐

