Azure Synapse 无服务器 SQL 池 - 查询执行失败

Azure Synapse severless SQL pool - query execution fails

完成教程 1 后,我正在研究这个 tutorial 2 from Microsoft Azure team to run the following query (shown in step 3)。但是查询执行给出了如下所示的错误:

问题: 错误原因可能是什么,我们该如何解决?

查询:

SELECT
    TOP 100 *
FROM
    OPENROWSET(
        BULK 'https://contosolake.dfs.core.windows.net/users/NYCTripSmall.parquet',
        FORMAT='PARQUET'
    ) AS [result]

错误:

Warning: No datasets were found that match the expression 'https://contosolake.dfs.core.windows.net/users/NYCTripSmall.parquet'. Schema cannot be determined since no files were found matching the name pattern(s) 'https://contosolake.dfs.core.windows.net/users/NYCTripSmall.parquet'. Please use WITH clause in the OPENROWSET function to define the schema.

注意: 文件在容器中的路径是正确的,实际上我只是通过右键单击容器中的文件生成了以下查询并生成了如下所示的脚本:

备注:

  1. Azure Data Lake Storage Gen2 帐户名:contosolake
  2. 容器名称:users
  3. Azure Data lake 帐户上使用的防火墙设置:
  4. Azure Data Lake Storage Gen2 帐户允许 public 访问 (ref):
  5. 容器具有所需的访问级别(ref

更新:

订阅的所有者是其他人,我没有看到选项选中“在 Data Lake Storage Gen2 帐户上为自己分配 Storage Blob Data Contributor 角色”框,如“基本信息”选项卡>“工作区”的第 3 项中所述教程 1 的详细信息部分。我也没有添加角色的权限 - 尽管我是突触工作区的所有者。所以我正在使用 Azure 团队 Configure anonymous public read access for containers and blobs 中描述的解决方法。

--解决方法

如果您无法授予 Storage Blob Data Contributor,请使用 ACL 授予权限。

All users that need access to some data in this container also needs to have the EXECUTE permission on all parent folders up to the root (the container). Learn more about how to set ACLs in Azure Data Lake Storage Gen2.

注:

Execute permission on the container level needs to be set within the Azure Data Lake Gen2. Permissions on the folder can be set within Azure Synapse.

前往装有NYCTripSmall.parquet的容器。

--更新

根据您在评论中的更新,您似乎必须执行以下操作。

联系存储帐户的所有者,并要求他们执行以下任务:

  • 将工作区 MSI 分配给存储 Blob 数据贡献者角色 存储帐户
  • 为您分配存储上的存储 Blob 数据贡献者角色 帐号

--

我能够按照您提到的同一数据集的教程文档获得查询结果。

既然您确认文件存在并且在正确的路径中,请在 运行 之前刷新链接的 ADLS 源并发布查询,以防出现暂时性问题。

我怀疑有两件事是

  1. 尝试在 ADLS 帐户的 Network Routing 设置中设置 Microsoft network routing

  1. 检查内置池是否在线,并且您在 Synapse 工作区和存储帐户上至少有 贡献者角色。 (如果当前凭据用于 运行 查询尚未创建资源)