Azure Data Factory复制活动映射:一对多映射报错咨询
解决Azure Data Factory中同一JSON字段映射到多列的报错问题
你碰到的这个「An item with the same key has already been added」报错,本质是ADF复制活动的默认映射逻辑在“源字段键唯一性”上的限制——当你直接把同一个JSON字段映射到两个目标列时,映射规则里会出现重复的源字段键,触发了这个重复键检查的错误。但这并不代表ADF不支持一对多映射,只是得换个方式实现:
两种可行的解决方案
方案一:用Data Flow的派生列转换(推荐,灵活度高)
如果你的流水线可以引入Data Flow组件,这是最直观的解决办法:
- 在Data Flow里添加派生列转换节点
- 针对需要填充的两个数据库列,分别创建派生列,每个列的表达式都直接引用同一个JSON源字段(比如
$."target-json-field",具体语法根据你的JSON结构调整) - 最后用Sink节点把处理后的数据写入数据库,这样同一个源字段就能同时给到两个目标列,完全不会触发重复键的问题。
方案二:在复制活动中用动态表达式映射
要是你只想用复制活动不想引入Data Flow,可以通过动态内容绕开重复键限制:
- 进入复制活动的「映射」标签页,先删掉重复的源字段映射项
- 第一个目标列正常选择对应的JSON源字段做映射
- 第二个目标列不要直接选源字段,点击「添加动态内容」,输入表达式来引用同一个源字段(比如
@item().yourJsonField,如果是嵌套JSON可能需要调整路径,比如@item().parentField.childField)
这种方式相当于通过动态计算生成第二个列的值,而不是直接复用源字段的映射键,就能避开ADF的重复键检查。
另外提个小注意点:如果你的JSON数据源是通过数据集定义的,确保数据集的结构配置没有限制重复引用同一字段;如果是动态数据源(比如REST API返回的JSON),表达式的路径写法可能需要根据实际返回结构微调,但核心思路都是避免在映射字典里出现重复的源键。
内容的提问来源于stack exchange,提问作者Alejandro B.
相关产品推荐
相关产品推荐

