无法从Azure Databricks访问Synapse Lake Database的问题求助
在Databricks读取Synapse湖数据库数据的解决方案
问题核心原因
Synapse Lake Database的数据库级位置仅为元数据逻辑记录,不存在与数据库同名的根文件夹,实际数据按表独立存储在各自的子路径下,因此直接读取数据库路径会触发"路径不存在"错误。
可行读取方式
1. 通过Synapse链接服务直接访问表(推荐)
在Databricks中配置指向目标Synapse工作区的链接服务,关联对应的Lake Database后,即可像在Synapse中一样用Spark SQL直接读取具体表:
df = spark.sql("SELECT * FROM `ConsumerGoods_fdw`.`Channel`")
配置时需确保Databricks服务主体拥有Synapse工作区的访问权限,以及对应存储账户的Blob存储数据读取者或更高权限。
2. 直接读取表的实际存储路径
每张表都有独立的存储路径,可在Synapse中执行SQL获取表的实际位置:
DESCRIBE EXTENDED `ConsumerGoods_fdw`.`Channel`;
在返回结果中找到Location字段,会得到类似abfss://contfrsynapse@stgacctst1.dfs.core.windows.net/forsynapse1/ConsumerGoods_fdw/Channel的路径(对应你链接服务配置的forsynapse1/ConsumerGoods_fdw前缀+表名子文件夹),之后在Databricks中读取该路径:
dd = spark.read.load("abfss://contfrsynapse@stgacctst1.dfs.core.windows.net/forsynapse1/ConsumerGoods_fdw/Channel")
补充说明
Synapse Lake Database采用元数据与存储分离的设计:数据库的位置仅用于元数据管理,实际表数据会存储在创建数据库时指定的链接服务路径下的表名子目录中,不存在数据库级的根文件夹,这是直接访问数据库路径报错的根本原因。
内容的提问来源于stack exchange,提问作者BryC
相关产品推荐
相关产品推荐

