Serverless SQL查询Delta表返回Invalid Object无效对象错误问题求助
问题原因
你在Notebook中执行的是Spark引擎查询,访问的是Spark的元数据目录;你后续执行的T-SQL查询使用的是Azure Synapse的SQL引擎(无服务器/专用SQL池),二者默认元数据不互通,且你查询时多拼接了不存在的dbo schema,才会触发对象不存在的报错。
解决步骤
- 第一步:修正查询语句,移除多余的dbo schema
如果你的Lake Database已经开启了Spark与SQL的元数据共享,直接执行以下查询即可:SELECT TOP (10) [CreditCardID] ,[CardType] ,[CardNumber] ,[ExpMonth] ,[ExpYear] ,[ModifiedDate] FROM [avsales].[creditcarddelta] - 第二步:确认Lake Database元数据共享配置
创建Lake Database时,需要勾选「允许Spark和SQL资源访问此数据库」的选项,Spark侧创建的表才会自动同步到SQL引擎的元数据中,不需要重复建表。如果未开启该配置,你可以直接用OPENROWSET直接读取Delta文件路径查询:SELECT TOP (10) [CreditCardID] ,[CardType] ,[CardNumber] ,[ExpMonth] ,[ExpYear] ,[ModifiedDate] FROM OPENROWSET( BULK '/delta/delta-table-703038', DATA_SOURCE = '你的存储账户绑定的Synapse数据源名称', FORMAT = 'DELTA' ) AS result - 第三步:检查表名大小写匹配
你建表时使用的表名是creditcardDelta,Spark默认大小写不敏感,但SQL池受排序规则影响可能存在大小写敏感的情况,你可以先执行以下语句查询当前avsales库下的所有表,确认实际存储的表名:USE avsales; SELECT name FROM sys.tables;
内容的提问来源于stack exchange,提问作者DataSteve
相关产品推荐
相关产品推荐

