使用Databricks作业读取Snowflake表时遇AnalysisException错误求助
解决方案
1. 先修复SQL语法错误
你的查询语句里重复了from关键字,这是基础语法错误,先修正为:
select * from dss.raw.abc
2. 解决命名空间错误的核心问题
错误提示说明Databricks默认会话目录无法识别Snowflake的三部分命名(数据库.模式.表)——当前会话目录指向Databricks自身,而非Snowflake。你可以通过以下两种方式访问Snowflake表:
方式一:用Snowflake Spark连接器直接读取
通过Spark的Snowflake数据源读取表,无需依赖Databricks会话目录:
# 配置Snowflake连接参数 snowflake_options = { "sfUrl": "你的Snowflake账户URL", "sfUser": "你的Snowflake用户名", "sfPassword": "你的Snowflake密码", "sfDatabase": "dss", "sfSchema": "raw", "sfWarehouse": "你的Snowflake仓库名称" } # 读取Snowflake表 df = spark.read.format("snowflake").options(**snowflake_options).option("dbtable", "abc").load() df.show()
方式二:创建Snowflake连接后用SQL查询
先在Databricks中创建Snowflake连接(需确保账户有权限):
CREATE OR REPLACE CONNECTION snowflake_connection OPTIONS ( type = "snowflake", url = "你的Snowflake账户URL", user = "你的Snowflake用户名", password = "你的Snowflake密码", warehouse = "你的Snowflake仓库名称", database = "dss", schema = "raw" );
之后通过连接限定Snowflake数据源查询:
# 若连接已指定database和schema,直接查询表名即可 spark.sql("SELECT * FROM snowflake.snowflake_connection.abc").show() # 或者完整指定三部分命名 spark.sql("SELECT * FROM snowflake.snowflake_connection.dss.raw.abc").show()
关键注意事项
- 确保Databricks集群已安装Snowflake Spark连接器:可通过集群库管理添加
net.snowflake:snowflake-jdbc:xxx和net.snowflake:spark-snowflake_2.12:xxx依赖(版本需匹配Spark版本) - 验证Snowflake权限:确保所用用户有权限访问
dss.raw.abc表及对应的计算仓库
内容的提问来源于stack exchange,提问作者NEERAJ GUPTA
相关产品推荐
相关产品推荐

