Databricks从Snowflake读取表时出现SQL编译错误如何解决
报错原因及解决方案
net.snowflake.client.jdbc.SnowflakeSQLException: SQL compilation error报错本质是Databricks提交给Snowflake的SQL请求不符合语法规则,或请求的资源/权限不匹配,可按以下步骤排查解决:
- 首先修正参数使用错误
如果你要传自定义查询语句,不能使用dbtable参数,需要替换为query参数,dbtable仅支持传入完整表名。两种读取场景的正确写法如下:- 直接读取整张表的写法:
# 从Snowflake读取整张表 df = spark.read.format("snowflake").options(**options).option("dbtable", "FBK_VIDEOS").load()- 自定义SQL查询的写法:
# 执行自定义SQL读取数据 df = spark.read.format("snowflake").options(**options).option("query", "SELECT * FROM FBK_VIDEOS").load() - 检查Snowflake侧权限配置
确认你使用的Snowflake账号具备以下权限,缺少任意权限都会触发SQL编译错误:DEV_WH计算仓库的USAGE权限DEV数据库的USAGE权限PUBLIC模式的USAGE权限FBK_VIDEOS表的SELECT权限
- 检查
snowflake URL格式正确性
你通过密钥获取的sf_url不能包含https://前缀,也不能带端口、路径后缀,标准格式为xxx.region.snowflakecomputing.com - 检查表名大小写匹配问题
Snowflake默认对未加双引号的标识符自动转换为大写,如果你的FBK_VIDEOS表创建时使用了小写加双引号的命名(比如create table "fbk_videos" (...)),需要将dbtable参数值改为带双引号的形式:option("dbtable", '"fbk_videos"') - 检查集群连接器兼容性
确认你的Databricks集群已经安装了和当前Spark版本匹配的Snowflake Spark连接器,未安装或版本不兼容也会触发参数解析错误。
内容的提问来源于stack exchange,提问作者KristiLuna
相关产品推荐
相关产品推荐

