无法通过 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 托管实例无法创建或还原数据库

没有 Azure 订阅,无法创建集成服务目录

无法通过端口 445 访问 Azure 存储帐户

通过 Azure 函数注入 DbContext 时无法访问已处置的对象

用SSMS连接Azure Sql Database 与连接本地库的一些操作区别

SQL Server:无法通过 SSMS 编辑数据