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

