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

Azure Data Factory复杂JSON映射问题:嵌套数组仅取首元素

ADF无DataFlow下嵌套数组JSON转Parquet的解决方案

方案1:优化Copy Activity的映射配置(优先尝试)

直接通过Copy Activity的源和映射设置解决数组展开问题:

  • 源端配置:如果JSON的嵌套数组ChildRows在父对象内部,在Copy Activity的源设置中,将JSON格式的Array path设为数组的完整路径(例如$.ParentRows[*].ChildRows,根据实际JSON结构调整),让ADF自动识别数组并展开所有元素。
  • 映射配置:点击映射界面的导入 schemas,确保父级字段和子数组的所有字段都被加载。对于父级字段,使用表达式引用父级元素,比如要映射父级的rowuid_Parent,表达式写../rowuid_Parent,这样每个子数组元素都会关联对应的父数据,实现Cross Join效果。
  • 禁止手动按索引映射(比如ChildRows[0].rowuid_Child),直接选择子数组内的字段,ADF会自动遍历所有数组元素生成行。

如果源是API输出,建议先通过Copy Activity将API响应保存到Blob/ADLS存储,再用上述方法处理存储中的JSON文件,避免API源的格式限制。

方案2:Lookup+ForEach+Copy组合处理

如果方案1无法生效,用活动组合实现数组遍历和数据合并:

  1. Lookup Activity:读取目标JSON文件,勾选First row only(如果JSON根是单个包含数组的对象),获取完整的父级数据和ChildRows数组。
  2. 变量初始化:创建一个类型为Array的变量(比如combinedData),用于存储合并后的每行数据。
  3. ForEach Activity:设置Items为@activity('Lookup').output.value[0].ChildRows,遍历ChildRows的每个元素。
  4. Set Variable Activity:在ForEach内部,将当前子元素与父级字段合并为单个对象,示例表达式:
    @json(concat('{"rowuid_Parent":"', activity('Lookup').output.value[0].rowuid_Parent, '","rowuid_Child":"', item().rowuid_Child, '"}'))
    
    (根据实际字段调整键名和值的类型)
  5. Append Variable Activity:将上述合并后的对象添加到combinedData变量中。
  6. Copy Activity:源选择变量,指向combinedData;目标选择Parquet存储,自动导入字段映射,完成数据写入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 15:08:15