在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函数无法满足需求,可结合外部代码处理:
- Lookup活动:读取整个JSON文件内容,输出为字符串格式。
- Azure Function活动:将Lookup输出的字符串传入Function,在Function中用代码(如Python/C#)遍历
profile下的所有动态键,将每个键值对转换为扁平结构,返回处理后的JSON数组。 - Parse活动:解析Function返回的JSON内容,再通过Copy活动输出到目标存储。
排查要点
- 确认
mapValues函数语法正确:参数顺序、lambda表达式的变量名(value对应键值,key对应动态键名),ADF函数大小写敏感。 - 若源JSON为单文档,需先通过派生列转为数组:
createArray(源字段名),否则Flatten无法生效。 - Flatten转换时,确保Unroll的字段为数组类型,可通过数据预览确认输出结构。
内容的提问来源于stack exchange,提问作者MiaLancaster
相关产品推荐
相关产品推荐

