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

如何在ADF中为多不同Schema的Excel工作表定义数据集Schema?

问题

计划使用ADF复制活动将ADLS中的Excel文件复制到Synapse Data Warehouse,该Excel包含多个Schema和列名不同的工作表,工作表列表通过参数传入ADF管道处理。

未定义或映射Schema时触发复制活动,出现如下错误:

ErrorCode=DelimitedTextColumnNameNotAllowNull,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=The name of column index 1 is empty. Make sure column name is properly specified in the header row.,Source=Microsoft.DataTransfer.Common

已完成以下排查:

  • 确认Excel所有列均有名称,首行无空单元格,列名无逗号、空格或特殊字符;
  • 源数据集为Excel类型(非CSV);
  • 已启用“首行作为标题”选项;
  • 通过ADF“预览数据”可正常查看数据,列名与源文件一致;
  • 单独为每个工作表导入Schema均正常,但因工作表Schema不同,无法统一处理。

需求:如何为每个Schema不同的Excel工作表定义对应Schema并完成复制?


解决方案

针对多Schema工作表的处理,可通过参数化数据集+动态Schema映射结合ForEach循环实现,具体步骤如下:

1. 创建参数化的Excel源数据集

在Excel源数据集中添加参数SheetName,用于动态指定当前处理的工作表名称:

  • 打开Excel源数据集,进入“参数”选项卡,添加字符串类型参数SheetName;
  • 在“连接”选项卡的“工作表名称”处,选择“动态内容”,引用该参数@dataset().SheetName。

2. 为每个工作表配置专属Schema映射

方式一:预定义Schema映射(适合工作表数量固定的场景)

  • 为每个不同Schema的工作表单独创建Schema映射JSON文件(存储在ADLS中),文件内容示例:
{
  "columnMappings": [
    {"sourceName": "ID", "sinkName": "ID", "dataType": "int"},
    {"sourceName": "Name", "sinkName": "Name", "dataType": "varchar(50)"}
  ]
}
  • 在管道中添加Lookup活动,根据当前工作表名称动态读取对应的Schema映射文件,将结果存储在变量中。

方式二:动态获取Schema(适合工作表数量不固定的场景)

  • 使用Lookup活动读取当前工作表的前几行数据,开启firstRowAsHeader获取列名;
  • 结合ADF表达式函数(如createArray、addProperty)动态生成源-目标列映射关系,需确保Synapse目标表已提前创建对应Schema的表。

3. 配置ForEach循环批量处理工作表

  • 在管道中添加ForEach活动,遍历传入的工作表列表参数;
  • 在ForEach内部添加复制活动:
    • 源数据集选择参数化的Excel数据集,将当前循环项赋值给SheetName参数;
    • 目标数据集选择Synapse Data Warehouse,动态指定目标表名(建议与工作表名称对应);
    • 在复制活动的“映射”选项卡,使用动态内容引用之前获取的Schema映射(或直接生成的映射表达式),实现每个工作表对应专属的Schema映射。

4. 错误规避补充

  • 确保Synapse目标表的Schema与对应工作表完全匹配,或根据业务需求开启复制活动的“允许Schema漂移”功能;
  • 若仍出现列名空值错误,可在复制活动源的“高级”选项中设置skipEmptyRows为true,并检查工作表是否存在隐藏列或格式异常的单元格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 09:10:05