问题描述
我使用 Azure Synapse portal 将我的 CSV 文件上传到我的 Azure Data Lake Storage Gen2。然后我尝试了 select Top 100 rows
并在运行自动生成的 sql 后出错。
自动生成的 sql:
SELECT
TOP 100 *
FROM
OPENROWSET(
BULK 'https://accountname.dfs.core.windows.net/filesystemname/test_file/contract.csv', FORMAT = 'CSV', PARSER_VERSION='2.0'
) AS [result]
错误:
File 'https://accountname.dfs.core.windows.net/filesystemname/test_file/contract.csv'
cannot be opened because it does not exist or it is used by another process.
解决方法
Synapse Studio 中的这个错误下面有 link(导致自助文档),它解释了错误本身。
您是否拥有存储帐户所需的权限?
您必须拥有 Storage Blob Data Contributor 或 Storage Blob Data Reader 才能使此查询正常工作。
文档摘要:
您需要具有存储 Blob 数据所有者/贡献者/读者角色才能 使用您的身份访问数据。即使您是一个所有者 存储帐户,您仍然需要将自己添加到其中之一 存储 Blob 数据角色。
查看 Control Storage account access for serverless SQL pool
的完整文档如果您的存储帐户受防火墙规则保护,请查看此 stack overflow answer。
,我刚刚拿走了你的代码并更新了我所拥有的路径,它工作得很好
SELECT
TOP 100 *
FROM
OPENROWSET(
BULK 'https://XXX.dfs.core.windows.net/himanshu/NYCTaxi/PassengerCountStats.csv', FORMAT = 'CSV', PARSER_VERSION='2.0'
) AS [result]
请检查您上传文件的路径和脚本中使用的路径是否相同。 你可以这样做来检查 导航到 WS -> 数据 -> ADLS gen2 -> 转到文件 -> 右键单击转到属性并从那里复制 Uri 粘贴到脚本中。