从 SQL On-Demand 端点运行查询时出现 SSMS 错误

Posted

技术标签:

【中文标题】从 SQL On-Demand 端点运行查询时出现 SSMS 错误【英文标题】:Error in SSMS when running query from SQL On-Demand endpoint 【发布时间】:2021-02-15 17:57:54 【问题描述】:

我正在尝试从存储在 Azure Blob 容器中的 CSV 文件中提取数据,当我尝试查询该文件时,我收到了一个错误

File 'https://<storageaccount>.blob.core.windows.net/<container>/Sales/2020-10-01/Iris.csv' cannot be opened because it does not exist or it is used by another process.

该文件确实存在,据我所知,它没有被其他任何东西使用。

我正在使用 SSMS 以及 Azure Synapse 的 SQL On-Demand 端点。

我在 SSMS 中所做的是在连接到端点后运行以下命令:

    CREATE DATABASE [Demo2]; CREATE EXTERNAL DATA SOURCE AzureBlob WITH ( LOCATION 'wasbs://<container>@<storageaccount>.blob.core.windows.net/' )
    SELECT * FROM OPENROWSET (
            BULK 'Sales/2020-10-01/Iris.csv',
            DATA_SOURCE = 'AzureBlob',
            FORMAT = '*'
            ) AS tv1;
    
    

我不确定我的问题出在哪里或下一步该去哪里。我是否在创建外部数据源时搞砸了?我需要在那里使用 SAS 令牌吗?如果需要,它的语法是什么?

【问题讨论】:

【参考方案1】:

@Ubiquitinoob44,你需要创建一个数据库凭证: https://docs.microsoft.com/en-us/azure/synapse-analytics/sql/develop-storage-files-storage-access-control?tabs=shared-access-signature

【讨论】:

谢谢阿曼多,我想出了一个不同的解决方案来解决上面发布的问题。【参考方案2】:

我发现了问题所在。我还没有尝试过 Armando 的建议。

首先,我必须转到容器并编辑 IAM 策略,以便为我的 Active Directory 登录名提供 Blob 数据贡献者角色。授予访问权限的用户将是您用于登录门户的电子邮件地址。

https://docs.microsoft.com/en-us/azure/storage/common/storage-auth-aad-rbac-portal?toc=/azure/synapse-analytics/toc.json&bc=/azure/synapse-analytics/breadcrumb/toc.json

之后,我不得不重新连接到 SSMS 中的按需端点。确保通过 Azure AD - MFA 选项登录。最初我使用的是 On-Demand 端点用户名和密码,它没有获得容器的 Blob Data Contributor 角色的访问权限。

https://docs.microsoft.com/en-us/azure/synapse-analytics/sql/resources-self-help-sql-on-demand

【讨论】:

很高兴知道您的问题已解决。您可以接受它作为答案(单击答案旁边的复选标记以将其从灰色切换为已填充)。这对其他社区成员可能是有益的。谢谢。

以上是关于从 SQL On-Demand 端点运行查询时出现 SSMS 错误的主要内容,如果未能解决你的问题,请参考以下文章

在数据块上运行 sql 查询时出现不匹配错误

运行多服务器 SQL Server 查询时出现超时错误

使用 wcf 对 sql server 运行查询时出现奇怪的错误

Management Studio 生成的 Sql 脚本在作为查询运行时出现错误

Asp.Net 在运行存储过程时出现超时错误

查询 oracle 多维数据集时出现 java.sql.SqlRecoverableException