Azure Data Factory复制嵌套JSON数据时仅同步1条订单的问题求助
Azure Data Factory REST API 嵌套JSON集合引用仅同步1条订单的解决方案
我之前处理过好几个类似的ADF嵌套JSON解析问题,结合你的描述,核心问题确实大概率出在JSON字段的混合类型冲突上——当ADF自动推断schema时,如果某个字段在不同订单里同时是字符串和数组类型,它会默认采用先识别到的类型,导致后续不符合该类型的订单数据被跳过,最终只同步了第一条订单的内容。下面给你几个针对性的解决方案:
方案1:手动强制定义JSON Schema(最直接)
ADF自动schema推断很容易在混合类型面前“翻车”,所以我们可以手动指定schema,强制把那个混合类型的字段设为数组:
- 打开你的REST数据集设置,关闭自动schema推断,选择「导入schema」→「从示例文件导入」(如果有API返回的完整JSON样本文件的话),或者直接点击「编辑」手动编写JSON schema。
- 找到那个存在类型冲突的字段(比如你提到的
meta下的某个子字段),把它的类型明确设为array。举个例子,如果是订单行字段:"order_lines": { "type": "array", "items": { "type": "object", "properties": { "product_id": {"type": "string"}, "quantity": {"type": "integer"} } } } - 重新设置集合引用为
meta字段,再预览数据确认所有7条订单都能被解析,最后运行复制活动就没问题了。
方案2:用数据流动预处理统一类型
如果嵌套结构比较复杂,手动写schema太麻烦,数据流动是更灵活的选择:
- 创建一个新的数据流动,源选择你的REST数据集,集合引用设为「无」,先把全部7条订单完整拉取进来。
- 添加一个派生列转换,用表达式把混合类型的字段统一转成数组。比如假设冲突字段是
order_items,表达式可以写:
这个表达式的作用是:如果字段是数组就直接用,是字符串就把它包装成单元素数组。iif(isArray(order_items), order_items, array(order_items)) - 再用展开转换,把
meta字段下的嵌套数据展开,最后把处理好的数据写入SQL目标表。
方案3:检查REST API返回的结构一致性
有时候问题根源在API本身:比如有些订单的meta字段返回的是单个对象,而不是数组(哪怕只有一条订单行),这会让ADF的集合引用只识别到第一条订单的数组结构,后面的单个对象就被忽略了。如果可以的话,联系API开发方调整返回格式,确保所有订单的meta都以数组形式返回,哪怕只有一条数据也要写成[]包裹的格式。
最后提醒一下:不管用哪个方案,先在数据预览里确认所有7条订单的嵌套数据都能被正确解析,再正式运行复制活动,这样能提前避免踩坑。
内容的提问来源于stack exchange,提问作者Erik Warming
相关产品推荐
相关产品推荐

