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

在Azure Data Factory中扁平化含动态键JSON的方法咨询

ADF处理动态键名JSON扁平化方案

针对profile字段下动态唯一键名的JSON扁平化需求,以下是两种可行的ADF实现方案:

方案1:数据流转(Data Flow)原生处理

步骤1:配置JSON源

创建JSON源数据集,指定文件路径;在源的JSON设置中,根据文件结构选择Array of documents(若为单文档则选Single document),确保能正确读取用户数据。

步骤2:派生列转换生成数组

添加派生列转换,使用mapValues函数将动态键转换为结构化数组,表达式:

mapValues(profile, (value, key) => merge(value, createMap('dynamic_key', key)))

该表达式会把每个动态键(如annoying_field_name_10)与对应的值对象合并,输出一个包含所有profile字段的数组,每个元素保留field_id、field_name、value、applicable,同时新增dynamic_key记录原键名。

步骤3:扁平化数组

添加Flatten转换,在Unroll by中选择上一步生成的数组字段,将数组中的每个对象展开为单独行,此时每条记录对应一个profile字段的扁平数据。

步骤4:透视转宽表(可选)

若需要将field_name转为列名(如把Gender、Interests作为列),添加Pivot转换:

  • Pivot key:选择field_name
  • Pivot columns:选择value,聚合方式选First(单用户同field_name唯一值)
  • Group by:选择first_name、last_name、userid等需要保留的顶层字段

步骤5:输出到目标存储

配置Sink数据集(如SQL数据库、CSV存储),将处理后的扁平数据写入目标。

方案2:Lookup+Azure Function处理复杂场景

若Data Flow函数无法满足需求,可结合外部代码处理:

  1. Lookup活动:读取整个JSON文件内容,输出为字符串格式。
  2. Azure Function活动:将Lookup输出的字符串传入Function,在Function中用代码(如Python/C#)遍历profile下的所有动态键,将每个键值对转换为扁平结构,返回处理后的JSON数组。
  3. Parse活动:解析Function返回的JSON内容,再通过Copy活动输出到目标存储。

排查要点

  • 确认mapValues函数语法正确:参数顺序、lambda表达式的变量名(value对应键值,key对应动态键名),ADF函数大小写敏感。
  • 若源JSON为单文档,需先通过派生列转为数组:createArray(源字段名),否则Flatten无法生效。
  • Flatten转换时,确保Unroll的字段为数组类型,可通过数据预览确认输出结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 04:46:11