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

从ADLS Gen2 Delta表导入Azure Synapse Delta表报错求助

解决Synapse查询ADLS Gen2 Delta外部表时的目录列表异常

问题分析

你遇到的无法列出https://container@storage.dfs.core.windows.net/_delta_log/*.*目录内容错误,核心原因有两个:一是数据源与外部表的存储路径不匹配,二是Synapse对ADLS目录的权限不足。

具体修复步骤

1. 统一数据源与外部表的存储路径

你当前的SQL中,test_data_source指向的是container@storage存储账户,但外部表testtable的LOCATION却指向targetcontainer@targetstorage,这会导致Synapse错误地去container@storage的根目录找_delta_log文件夹,而实际的Delta日志在targetcontainer@targetstorage里。

修正后的SQL示例:

-- 创建Delta文件格式
CREATE EXTERNAL FILE FORMAT DeltaFileFormat
WITH (  
     FORMAT_TYPE = DELTA  
);   

-- 数据源指向实际存储Delta数据的ADLS目录
CREATE EXTERNAL DATA SOURCE test_data_source
WITH
(     LOCATION = 'abfss://targetcontainer@targetstorage.dfs.core.windows.net/table_metadata/testtable'
      ,CREDENTIAL = <database scoped credential> -- 若使用服务主体访问,需配置此凭据;用托管标识可暂时注释,但要确保托管标识有权限
); 

-- 创建外部表,LOCATION可留空(已由数据源指定表目录)
CREATE EXTERNAL TABLE testtable (
     job_id int,
     source_type varchar(10),
     server_name varchar(10),
     database_name varchar(15),
     table_name varchar(20),
     custom_query varchar(100),
     source_location varchar(500),
     job_timestamp datetime2,
     job_user varchar(50)
) WITH (
        LOCATION = '',
        data_source = test_data_source,
        FILE_FORMAT = DeltaFileFormat
);

select * from testtable; 

2. 验证权限配置

  • 确保Synapse工作区的托管标识(或数据库范围凭据对应的服务主体)拥有ADLS Gen2容器的存储Blob数据读取者或存储Blob数据参与者权限,重点要能读取_delta_log目录下的所有文件。
  • 检查ADLS路径的拼写:容器名、存储账户名、目录路径大小写敏感,必须和实际存储路径完全一致。

3. 确认Delta目录结构

登录Azure存储浏览器,检查targetcontainer@targetstorage下的table_metadata/testtable目录,确保存在_delta_log文件夹,且里面有Databricks写入Delta时生成的日志文件(如00000000000000000000.json)。

内容的提问来源于stack exchange,提问作者Developer Rajinikanth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 20:25:16