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

如何将Widget值传入Databricks SQL表路径?遇解析异常

解决Databricks SQL中Widget变量传入LOCATION路径的ParseException问题

问题原因

你的SQL语句拼接Widget变量的方式错误,导致生成的路径字符串出现相邻双引号("abfss://""@xxx..."),SQL解析器无法识别该格式,触发了ParseException。

正确实现方法

方法1:直接在双引号内嵌入Widget变量

将${storage_account_containervar}直接放在路径的双引号内部,Databricks会自动替换变量并生成合法字符串:

%sql 
create table if not exists CTRL.t_migration_Status (
    Run_Seq_num int,
    Table_Id varchar(10),
    Table_owner varchar(50),
    Table_Name varchar(50),
    hash_columns varchar(100),
    Load_type varchar(50),
    copy_date varchar(100),
    Source_rec_count int,
    target_Rec_count int,
    Rec_vld_status varchar(10),
    Source_hash_total int,
    Target_hash_total int,
    Hash_total_vld_Status varchar(10)
) location "abfss://${storage_account_containervar}@xxx.dfs.core.windows.net/CTRL/";

方法2:通过Python预处理变量后执行SQL

如果需要复杂路径拼接逻辑,可先用Python获取Widget值并构造完整路径,再执行SQL:

# 获取Widget变量值
storage_container = dbutils.widgets.get("storage_account_containervar")
# 构造完整存储路径
location_path = f"abfss://{storage_container}@xxx.dfs.core.windows.net/CTRL/"

# 执行建表SQL
spark.sql(f"""
create table if not exists CTRL.t_migration_Status (
    Run_Seq_num int,
    Table_Id varchar(10),
    Table_owner varchar(50),
    Table_Name varchar(50),
    hash_columns varchar(100),
    Load_type varchar(50),
    copy_date varchar(100),
    Source_rec_count int,
    target_Rec_count int,
    Rec_vld_status varchar(10),
    Source_hash_total int,
    Target_hash_total int,
    Hash_total_vld_Status varchar(10)
) location "{location_path}";
""")

验证说明

两种方法都会生成格式合法的路径字符串(例如"abfss://mycontainer@xxx.dfs.core.windows.net/CTRL/"),避免了双引号重复问题,SQL解析器可正常识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:20:43