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

Azure Data Factory复制活动字符串数组映射Cosmos SQL Sink报错问题

问题根因

这是Azure Data Factory Copy Activity的已知默认限制:当你直接将管道变量作为源字段参与映射时,Copy Activity的映射层默认仅支持传递字符串、数字、布尔等标量类型,会默认将数组、对象等复合类型尝试转换为字符串,无法直接匹配Sink端的数组类型定义,所以会抛出你遇到的类型转换错误。

可行解决方案

方案1:使用Mapping Data Flow替代Copy Activity(最推荐)

数据流原生支持复合类型操作,操作步骤如下:

  • 在数据流中添加你的JSON源,同时可以通过参数将管道的数组变量传递到数据流中
  • 添加「派生列」组件,定义accessGroups字段为传入的数组参数,类型显式设置为Array(String)
  • 直接将派生的accessGroups字段映射到Cosmos Sink的对应数组字段即可,不会出现类型转换问题

方案2:Copy Activity结合Cosmos自定义写入脚本(无需更换组件)

如果你必须保留Copy Activity的配置,可以通过序列化+反序列化的方式绕过限制:

  • 首先将管道中的数组类型accessGroups变量通过ADF内置的json()函数序列化为JSON字符串,作为字符串类型字段映射到Sink的accessGroups字段
  • 打开Cosmos Sink的「设置」选项卡,找到「写入行为」配置,选择使用自定义预写入脚本,添加如下逻辑:
function processItem(item) {
    item.accessGroups = JSON.parse(item.accessGroups);
    return item;
}
  • 保存配置后运行任务即可正常写入数组类型字段

方案3:合并变量到源JSON结构

将管道变量中的accessGroups数组直接合并到你的源JSON文件的结构中,不要作为单独的管道变量传递。Copy Activity对JSON源中自带的数组字段识别和映射能力是完整的,只要源Schema导入后将accessGroups类型定义为Array(String),直接映射到Sink的同类型字段即可正常传递。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:54:03