在 Azure Data Lake Storage Gen2 中的 CSV 文件上使用无服务器 sql 池内置运行查询失败

问题描述

我使用 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 ContributorStorage Blob Data Reader 才能使此查询正常工作。

文档摘要:

您需要具有存储 Blob 数据所有者/贡献者/读者角色才能 使用您的身份访问数据。即使您是一个所有者 存储帐户,您仍然需要将自己添加到其中之一 存储 Blob 数据角色。

查看 Control Storage account access for serverless SQL pool

的完整文档

如果您的存储帐户受防火墙规则保护,请查看此 stack overflow answer

参考full docs article

,

我刚刚拿走了你的代码并更新了我所拥有的路径,它工作得很好

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 粘贴到脚本中。