You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Databricks直接SQL查询不使用spark.sql传入变量的方法咨询

Databricks SQL单元格变量传入解决方案

以下方案均无需使用spark.sql()封装,也不会触发参数输入弹窗:

方案1:使用current_setting()函数(兼容性最好)

你通过SET定义的会话变量可以直接通过current_setting()函数读取,无需使用特殊替换符,也不需要处理引号转义:

%sql
SET four_date = '2021-09-16';
SELECT * FROM df2_many WHERE four_date = current_setting('four_date');

方案2:使用Hive会话变量引用语法

如果你习惯用变量占位符的写法,可以用${hivevar:变量名}的格式引用SET定义的变量,该语法和触发弹窗的小部件$语法不属于同一体系,不会弹出输入框:

%sql
SET four_date = '2021-09-16';
SELECT * FROM df2_many WHERE four_date = ${hivevar:four_date};

方案3:标准SQL会话变量声明(仅支持Databricks Runtime 12.2及以上版本)

高版本运行时支持直接用DECLARE声明类型安全的会话变量,不需要额外引用符:

%sql
DECLARE four_date STRING DEFAULT '2021-09-16';
-- 为避免变量名和表字段名冲突,可加session前缀标识
SELECT * FROM df2_many WHERE four_date = session.four_date;

你之前使用的{{four_date}}是Jinja模板语法,Databricks原生SQL单元格默认不开启Jinja解析,因此无法识别该占位符。

内容的提问来源于stack exchange,提问作者RAMESHKUMAR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:45:04