问题描述
我试图从存储在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令牌吗?如果是,它的语法是什么?
解决方法
@ Ubiquitinoob44,您需要创建一个数据库凭证: https://docs.microsoft.com/en-us/azure/synapse-analytics/sql/develop-storage-files-storage-access-control?tabs=shared-access-signature
,我弄清楚了问题所在。我还没有尝试过Armando的建议。
首先,我必须转到容器并编辑IAM策略,以使Active Directory登录名具有Blob数据贡献者角色。要授予访问权限的用户将是您用于登录门户网站的电子邮件地址。
此后,我不得不重新连接到SSMS中的按需端点。确保您通过Azure AD-MFA选项登录。最初,我使用的是按需端点用户名和密码,而该用户名和密码无法访问该容器的Blob数据贡献者角色。
https://docs.microsoft.com/en-us/azure/synapse-analytics/sql/resources-self-help-sql-on-demand