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
相关产品推荐
相关产品推荐

