Azure Synapse 无服务器 SQL 池 - 查询执行失败
Posted
技术标签:
【中文标题】Azure Synapse 无服务器 SQL 池 - 查询执行失败【英文标题】:Azure Synapse severless SQL pool - query execution fails 【发布时间】:2021-12-20 18:58:09 【问题描述】:完成教程 1 后,我正在处理来自 Microsoft Azure 团队的 tutorial 2 以运行以下查询(显示在 step 3 中)。但是查询执行给出了如下所示的错误:
问题:错误的原因可能是什么,我们该如何解决?
查询:
SELECT
TOP 100 *
FROM
OPENROWSET(
BULK 'https://contosolake.dfs.core.windows.net/users/NYCTripSmall.parquet',
FORMAT='PARQUET'
) AS [result]
错误:
警告:未找到与表达式“https://contosolake.dfs.core.windows.net/users/NYCTripSmall.parquet”匹配的数据集。无法确定架构,因为找不到与名称模式“https://contosolake.dfs.core.windows.net/users/NYCTripSmall.parquet”匹配的文件。请在 OPENROWSET 函数中使用 WITH 子句来定义架构。
注意:容器中文件的路径是正确的,实际上我只是通过右键单击容器中的文件来生成以下查询并生成脚本如下所示:
备注:
-
Azure Data Lake Storage Gen2 帐户名称:
contosolake
容器名称:users
Azure 数据湖帐户上使用的防火墙设置:
Azure Data Lake Storage Gen2 帐户允许公共访问 (ref):
容器具有所需的访问级别 (ref)
更新:
订阅的所有者是其他人,我没有得到选项选中“为自己分配 Data Lake Storage Gen2 帐户上的 Storage Blob 数据参与者角色”框,在“基本”选项卡 > 工作区详细信息部分的第 3 项中描述教程 1. 我也没有添加角色的权限 - 尽管我是突触工作区的所有者。所以我正在使用 Azure 团队的 Configure anonymous public read access for containers and blobs 中描述的解决方法。
【问题讨论】:
您可以尝试在 ADLS 中从Network Routing
设置中设置 Microsoft network routing
您使用的是托管资源组还是托管虚拟网络?
@KarthikBhyresh-MT 订阅的所有者是其他人,我没有得到教程 1 的Basics tab > Workspace details
部分的第 3 项中描述的选项Check the "Assign myself the Storage Blob Data Contributor role on the Data Lake Storage Gen2 account" box
。我也没有权限添加角色 - 虽然我是突触工作区的所有者。所以我正在使用 Azure 团队的 Configure anonymous public read access for containers and blobs 中描述的解决方法。
Oki 什么级别的访问,所以您可以在 IAM 中看到 ADLS。您能否尝试从 ADLS 中的 Network Routing
设置更改为 Microsoft network routing
否则尝试使用 URL 更新查询为 https://adlsAccountName-internetrouting.blob.core.windows.net/my-filesystem/NYCTripSmall.parquet
您在数据湖存储中拥有什么级别的访问权限,请查看 IAM 中的 my access
【参考方案1】:
--解决方法
如果您无法授予 Storage Blob Data Contributor,请使用 ACL 授予权限。
所有需要访问此容器中某些数据的用户也需要 对直到根目录的所有父文件夹拥有 EXECUTE 权限 (容器)。 Learn more about how to set ACLs in Azure Data Lake Storage Gen2.
注意:
容器级别的执行权限需要在 Azure 数据湖 Gen2。可以在文件夹中设置权限 Azure 突触。
转到装有 NYCTripSmall.parquet 的容器。
--更新
根据您在 cmets 中的更新,您似乎必须执行以下操作。
联系存储帐户的所有者,并要求他们执行以下任务:
将工作区 MSI 分配给存储 Blob 数据参与者角色 存储帐户 将您分配到存储上的存储 Blob 数据参与者角色 帐号--
我能够按照您提到的相同数据集的教程文档获得查询结果。
由于您确认文件存在并且在正确的路径中,请在运行前刷新链接的 ADLS 源并发布查询,以防出现暂时性问题。
我怀疑有两件事
-
尝试在 ADLS 帐户的
Network Routing
设置中设置 Microsoft network routing
。
-
检查内置池是否在线,并且您在 Synapse 工作区和存储帐户上至少具有参与者角色。 (如果用于运行查询的当前凭据尚未创建资源)
【讨论】:
@katth 我有一个 Azure Synapse Pipeline 问题已发布here - 如果您有时间提出建议/评论等。谢谢。以上是关于Azure Synapse 无服务器 SQL 池 - 查询执行失败的主要内容,如果未能解决你的问题,请参考以下文章
是否可以通过 azure databricks 连接到无服务器 sql 池?
Azure Synapse 无服务器 - Azure Synapse 无服务器池中的流加载镶木地板意外结束
在 Azure Synapse 专用/无服务器 SQL 池中使用增量表