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

Azure Synapse批量查询ADLS Gen2文件报错误代码12的问题求助

根因说明

这个报错本质是Azure Synapse无服务器池批量访问大量ADLS Gen2文件时,触发了存储端的令牌验证限流或并发连接数上限,并非真实的文件权限问题,所以才会出现单文件访问正常、批量访问随机报错的情况。

解决方案

1. 完善外部数据源配置,显式指定托管身份凭证

你当前的外部数据源未显式绑定托管身份,批量请求时会出现令牌获取竞争,导致随机验证失败,按如下方式修改外部数据源定义:

CREATE DATABASE SCOPED CREDENTIAL ManagedIdentityCred
WITH IDENTITY = 'Managed Identity';

CREATE EXTERNAL DATA SOURCE analytics
WITH
(
    location = 'https://<url>.dfs.core.windows.net/analytics',
    CREDENTIAL = ManagedIdentityCred
);

2. 新增文件级错误跳过配置

在OPENROWSET中添加ERRORFILE_DATA_SOURCE和ERRORFILE_LOCATION参数,即可实现文件级错误的自动跳过,不会因为单个文件加载失败中断整个查询:

SELECT
    Parsed.*
FROM OPENROWSET
(
    bulk '2021/*/**.log',
    maxerrors = 2147483647,
    data_source = 'analytics',
    format = 'csv',
    fieldterminator ='0x0b',
    fieldquote = '0x0b',
    ERRORFILE_DATA_SOURCE = 'analytics',
    ERRORFILE_LOCATION = 'error_logs/'
) WITH (doc nvarchar(max)) AS Rows
CROSS APPLY OPENJSON(Rows.doc)
WITH
    (
        col1 NVARCHAR(100),
        col2 NVARCHAR(100),
        ...,
        coln NVARCHAR(MAX)
    ) AS Parsed

加载失败的文件路径会自动写入你指定的error_logs/目录下,方便后续排查。

3. 拆分查询范围,减少单次查询加载的文件量

不要一次性扫描全量2021年的所有log文件,按月份、日期目录拆分查询,比如先查2021/01/**.log、再查2021/02/**.log,最后合并结果,可大幅降低并发连接的压力。
如果文件路径包含日期等分区信息,可以使用filepath()函数做分区剪枝,进一步过滤不需要加载的文件。

4. 调整ADLS Gen2的限流配置

登录Azure portal查看对应存储账户的监控指标,确认是否存在限流( throttling)事件,如果有可提交支持工单提升存储账户的并发请求配额,或者将存储账户升级到高级性能层。

5. 预创建分区外部表(长期方案)

如果需要经常查询这部分数据,可提前创建分区外部表,按日期、目录做分区,查询时无服务器池会自动走分区剪枝,稳定性比单次OPENROWSET全量扫描高很多。

内容的提问来源于stack exchange,提问作者William Moore

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:18:01