无法通过 SSMS 访问 Azure Synapse Spark 表
Posted
技术标签:
【中文标题】无法通过 SSMS 访问 Azure Synapse Spark 表【英文标题】:Can't Access Azure Synapse Spark Tables through SSMS 【发布时间】:2021-07-01 15:33:30 【问题描述】:我在通过 SSMS 连接到我的火花池集群时遇到问题。 在 Synapse Studio 中,我执行以下步骤:
-
首先,我使用 sql 在 Apache Spark 集群上创建一个数据库:
%%sql
创建数据库测试
接下来,我使用 pyspark 创建一个指向带有镶木地板文件的 ADLS2 文件夹的表: spark.sql("如果不存在则创建表 test.testparquet 使用 parquet LOCATION 'abfss://test@test.test.core.windows.net/test/output'")
数据库是通过 Synapse Studio 创建的,没有任何问题。
然后我转到 SSMS 并将按需 sql 实例放入浏览器:
Azure Synapse On Demand SqlInstance
-
然后当我去查询 spark 数据库和表时,我得到以下错误:
Credential Error
此功能已经使用了几个月,所以我不知道是什么原因造成的。 我尝试通过在 spark 数据库中创建范围凭据来解决此问题,但是当我删除重新创建数据源时,出现以下错误:
消息 15875,第 16 级,状态 8,第 2 行 复制数据库不允许操作 DROP EXTERNAL DATA SOURCE。 消息 102,第 15 级,状态 1,第 6 行 'sqlondemand' 附近的语法不正确。
为什么我不能再通过 SSMS 访问我的 ADLS 2 parquet 文件?
【问题讨论】:
是否使用 SAS 令牌创建了基础数据库范围凭据?也许它过期了? 奇怪的是,它在创建 spark 数据库和表时不需要范围凭据,我只是能够连接到按需实例并查询表。 也许我看错了 - 但如果您正在创建外部资源,那么您需要一个 SCOPED CREDENTIAL。 对不起,我应该在我的帖子中更清楚。我的错。这是发生了什么 1) 当我第一次设置它时,我通过突触工作室创建了 spark 数据库和表。要通过 synapse Studio 设置数据库和表,它不需要事先创建任何范围凭据。我能够使用 sqlondemand 链接通过 SSMS 连接到我的 spark 表。一些外部源是如何通过突触工作室创建的。我能够通过 ssms 访问我的 spark 数据库和表,几个月来没有问题,现在我收到了这个凭据错误。 感谢您的澄清,很遗憾我没有任何指导给您。您可能需要提交支持票。 【参考方案1】:你是使用AAD用户还是SQL用户连接?
对于 AAD 用户,用户的身份被传递到存储以读取数据。
对于 SQL 用户,您必须创建凭据才能读取数据形式的存储。 SQL 用户的范围仅限于 SQL 池,因此如果没有适当的凭据,它就无法访问存储。为此,请运行以下命令:
CREATE CREDENTIAL [https://<mystorageaccountname>.dfs.core.windows.net/<mystorageaccountcontainername>] WITH IDENTITY='SHARED ACCESS SIGNATURE', SECRET = 'YOUR_SECRET';
GRANT REFERENCES ON CREDENTIAL::[https://<mystorageaccountname>.dfs.core.windows.net/<mystorageaccountcontainername>] TO [specific_user];
对于 SQL 用户,当您将凭证命名为存储路径时,无服务器 SQL 池在查询湖中的数据时会自动使用它(只要用户有权使用它)。
我猜发生的事情是,您很久以前创建了凭据,但现在它已过期,所以您开始看到此错误消息。
【讨论】:
以上是关于无法通过 SSMS 访问 Azure Synapse Spark 表的主要内容,如果未能解决你的问题,请参考以下文章
通过 Azure 函数注入 DbContext 时无法访问已处置的对象