You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Azure Synapse无服务器SQL池查询Delta表时遇目录列表错误

问题描述

使用Azure Synapse无服务器SQL池,通过Azure Data Studio以SQL管理员凭据登录,执行以下OPENROWSET查询指定Delta表时:

SELECT
    TOP 100 *
FROM
    OPENROWSET(
        BULK 'https://(...).dfs.core.windows.net/(...)/table/',
        FORMAT = 'DELTA'
    ) AS [result]

触发错误:

Content of directory on path 'https://.../table/_delta_log/*.*' cannot be listed.

仅该table表出现此问题,复制生成的table_copy可正常查询,且原表仅能在Synapse UI内正常访问。已尝试的操作包括:

  • 配置IAM权限(Storage Blob Contributor、Storage Blob Owner、Storage Queue Data Contributor及Owner)
  • 为Synapse Studio托管标识设置ACL的读、写、执行权限并传播至所有子项
  • 恢复文件夹默认权限
  • 通过PySpark复制、删除并重写原表
可能的解决方案
  1. 针对性修复_delta_log目录的ACL权限
    即使已设置父目录ACL,原表的_delta_log目录可能存在权限继承异常:
  • 为Synapse无服务器SQL池的托管标识(注意是无服务器池自身的标识,而非Synapse Studio标识)单独分配_delta_log目录的读取+执行权限,同时覆盖默认权限和访问权限
  • 用Azure Storage Explorer逐一验证_delta_log下所有日志文件的权限,确保无孤立权限文件
  1. 切换至托管标识认证查询
    替换当前SQL管理员凭据的认证方式,改用无服务器SQL池的托管标识执行查询:
SELECT TOP 100 *
FROM OPENROWSET(
    BULK 'https://(...).dfs.core.windows.net/(...)/table/',
    FORMAT = 'DELTA',
    CREDENTIAL = (IDENTITY = 'Managed Identity')
) AS [result]

确保该托管标识已被授予存储账户的Storage Blob Data Reader权限。

  1. 修复Delta表日志完整性
    原表_delta_log可能存在损坏或权限异常的日志文件:
  • 在Synapse Spark池中执行Delta Lake的VACUUM命令清理无效日志:
from delta.tables import DeltaTable

delta_table = DeltaTable.forPath(spark, "abfss://...@....dfs.core.windows.net/.../table/")
delta_table.vacuum(0)  # 清理所有过期文件,生产环境需谨慎操作

清理完成后再尝试无服务器SQL池查询。

  1. 检查存储账户网络限制
    确认存储账户的防火墙规则未阻断Synapse无服务器SQL池的访问:
  • 进入存储账户 -> 网络 -> 防火墙和虚拟网络,确保勾选“允许受信任的Microsoft服务访问此存储账户”
  • 若配置了VNet限制,需同步配置Synapse无服务器池的VNet集成,或添加对应IP范围至存储账户白名单

内容的提问来源于stack exchange,提问作者Dinis Rodrigues

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 23:45:48