如何检查Databricks发起的查询是否被下推至Snowflake执行
方法1:查看Spark执行计划
对最终生成的DataFrame执行df.explain("extended")或者df.explain("formatted"),查看输出的执行计划结构即可判断:
- 如果Scan Snowflake节点中明确展示
PushedFilters列表包含你编写的过滤条件,同时Join、聚合等操作被包含在Snowflake Scan的下推逻辑中,甚至可以直接看到连接器生成的完整下推SQL语句,说明对应逻辑已经下推到Snowflake侧运行 - 如果执行计划中出现
Exchange、HashAggregate、SortMergeJoin等纯Spark原生算子,且前置的Snowflake Scan仅返回了原始全量表数据,说明对应逻辑是在Databricks集群侧运行
方法2:查看Snowflake侧查询历史
登录Snowflake控制台,进入查询历史页面,筛选你Databricks连接所用的Snowflake账号、和代码运行时间匹配的时间窗口:
- 如果你能找到和DataFrame计算逻辑匹配的SQL查询(包含你编写的过滤条件、Join字段、聚合函数等),且查询执行时间和Databricks代码运行时间吻合,说明对应逻辑在Snowflake侧运行
- 如果你仅能看到
SELECT * FROM 目标表这类全量拉取的简单查询,说明后续的所有计算都在Databricks侧运行
注意事项
- 自定义Spark UDF、非标准SQL函数、部分复杂窗口函数无法被下推,遇到这类算子时连接器会先拉取前置计算结果到Spark侧再执行后续计算
- 如果需要提升下推概率,可以先将中间计算结果写入Snowflake临时表,再基于临时表做后续计算
内容的提问来源于stack exchange,提问作者Ashok Khote
相关产品推荐
相关产品推荐

