如何用Azure Data Factory原生算子转换嵌套JSON为表格?
使用Azure Data Factory原生算子实现动态嵌套JSON转扁平表格
可以完全通过ADF Data Flow的原生转换算子实现,无需依赖Azure Functions等代码类功能,具体步骤如下:
1. 源数据集配置
在Data Flow中添加Blob Storage JSON源,将JSON设置里的文档格式设为「单个文档」,确保能正确读取完整的嵌套JSON结构。
2. 第一层:将顶层动态对象转为键值对数组
添加派生列转换,创建新列level1,使用以下表达式将parentProperty下的动态键值对转为数组:
mapToEntries(parentProperty)
该表达式会把parentProperty中的每个条目(如key1及其子对象)转换为{"key": "key1", "value": {...}}格式的数组元素。
3. 第一层扁平化
添加扁平化转换:
- 设置展开依据为
level1,将数组拆分为单独的行 - 在展开根中选择
level1,然后提取两个字段:level1.key→ 命名为Column1level1.value→ 命名为level2_obj(临时存储第二层嵌套对象)
4. 第二层:将第二层动态对象转为键值对数组
再次添加派生列转换,创建新列level2,使用表达式处理level2_obj:
mapToEntries(level2_obj)
此步骤将level2_obj中的动态键(如key2、key3)转为{"key": "key2", "value": {"property1": x, "property2": y}}格式的数组元素。
5. 第二层扁平化
添加第二个扁平化转换:
- 设置展开依据为
level2,拆分数组为单独行 - 提取字段:
level2.key→ 命名为Column2level2.value.property1→ 命名为Column3level2.value.property2→ 命名为Column4
6. 清理与输出
添加选择转换,仅保留Column1、Column2、Column3、Column4四个目标列,移除所有临时生成的中间列。最后连接到分隔文本Blob接收器,完成数据导出。
关键说明
之前使用Select和Derived Column无效的原因是JSON中的键为动态值,无法通过固定字段名直接引用。通过mapToEntries将对象转为键值对数组,再结合扁平化转换,就能动态处理任意数量的第一层和第二层键,完全适配需求中的结构。
内容的提问来源于stack exchange,提问作者donald.nairn
相关产品推荐
相关产品推荐

