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

如何用ADF将含多数组的复杂JSON转换为CSV?

解决Azure Data Factory多层JSON转CSV的重复行问题

问题本质

两次独立执行Flatten分别处理elementCollection和attributes,本质是让两个无直接关联的数组产生了笛卡尔积关联——19条元素×100个属性,自然生成1900行冗余数据,仅当元素与属性的关联ID匹配时才会出现有效值。

可行解决方案

方案一:嵌套Flatten+属性列映射

  1. 第一步Flatten:仅展开元素集合
    • 源JSON接入后,添加Flatten转换,只选择elementCollection数组进行展开,保留每个元素对应的attributes嵌套数组不展开。
  2. 第二步Flatten:按元素嵌套展开属性
    • 对每个元素下的attributes数组执行Flatten,此时是基于单个元素的嵌套展开,不会跨元素关联属性,从根源避免笛卡尔积。
  3. 派生列生成目标CSV字段
    • 添加派生列转换,针对每个需要输出的属性列,用条件表达式提取对应值:
      if(attributes.name == "用户ID", attributes.value, null)
      
      重复此操作生成所有需要的CSV列。
  4. 聚合合并单行
    • 添加Aggregate转换,按元素的唯一标识(比如elementId)分组,对每个属性列用max()函数提取有效值(同一元素的属性行仅对应列有值,其余为null,max会自动取非空值),最终合并为单行元素数据。

方案二:先聚合属性为结构化对象再关联

  1. 聚合属性数组
    • 先添加Aggregate转换,按属性所属的elementId分组,用collect函数将同一元素的属性聚合为键值对集合:
      collect(@(key=attributes.name, value=attributes.value))
      
  2. 展开元素集合
    • 添加Flatten转换展开elementCollection数组。
  3. 关联元素与属性
    • 添加Join转换,通过elementId将展开后的元素与聚合后的属性数据关联,此时是一对一关联,不会产生重复行。
  4. 派生列提取属性值
    • 用lookup函数从属性集合中提取对应值生成CSV列:
      lookup(attributes_collection, "key", "用户ID").value
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:32:48