无法通过ssms访问azure synapse spark表

k7fdbhmy  于 2021-07-09  发布在  Spark
关注(0)|答案(1)|浏览(430)

我通过ssms连接到我的spark pool群集时遇到问题。在synapse studio中,我正在执行以下步骤:
首先,我使用sql:%%sql在apachespark集群上创建一个数据库
创建数据库测试
接下来,我使用pyspark:spark.sql(“create table if not exists test.testparquet using parquet location”)创建一个指向adls2文件夹的表,其中包含parquet文件abfss://test@test.test.core.windows.net/test/output'")
数据库是通过synapse studio创建的,没有任何问题。
然后我转到ssms并将ondemand sql示例放入浏览器:
azure synapse随需应变sqlinstance
当我去查询spark数据库和表时,我得到以下错误:
凭证错误
这个功能已经运行了几个月了,所以我不知道是什么导致了这个。我试图通过在spark数据库中创建作用域凭据来解决此问题,但当我删除一个重新创建数据源时,出现以下错误:
msg 15875,级别16,状态8,第2行操作删除外部数据源不允许用于复制数据库。消息102,级别15,状态1,第6行“sqlondemand”附近的语法不正确。
为什么我不能再通过ssms访问我的adls 2Parquet文件?

nc1teljy

nc1teljy1#

您使用aad user还是sql user连接?
对于aad user,用户的身份被传递到存储器以读取数据。
对于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 user,当您将凭证命名为指向存储的路径时,无服务器sql池在查询湖中的数据时会自动使用它(只要用户有使用它的权限)。
我猜发生的事情是,您很久以前创建了凭据,但现在它过期了,所以您开始看到此错误消息。

相关问题