如何在Data Factory数据流中从扁平文件创建双层嵌套数组
在Azure Data Factory中构建双层嵌套数组(员工-客户-产品)
针对扁平文件生成双层嵌套JSON的需求,你可以通过**两次聚合转换(Aggregate)**实现,核心是从最内层的产品开始逐层向上聚合:
假设扁平数据源列结构
假设你的扁平文件包含以下字段:employeeNumber, employeeName, customerId, customerName, productName, productPrice
步骤1:聚合生成客户-产品的单层嵌套
- 添加聚合转换,将分组键设置为
customerId、customerName,同时保留employeeNumber、employeeName(用于后续员工层级聚合) - 在聚合列中,使用
collect()+struct()组合生成每个客户的产品数组:
这一步会把同一个客户下的所有产品打包成嵌套数组,输出每条数据对应一个客户,包含其产品列表。products = collect(struct(productName as name, productPrice as price))
步骤2:聚合生成员工-客户的双层嵌套
- 再添加一个聚合转换,将分组键设置为
employeeNumber、employeeName - 在聚合列中,再次使用
collect()+struct()组合生成每个员工的客户数组:
这一步会把同一个员工下的所有客户(已包含产品数组)打包成外层数组,最终输出每条数据对应一个员工,结构完全匹配你的目标。customers = collect(struct(customerId as id, customerName as name, products as products))
目标结构验证
最终输出的JSON结构如下:
{ "employeeNumber": "00001", "employeeName": "John Doe", "customers": [ { "id": "99999", "name": "Jane Doe", "products": [ { "name": "XYZ", "price": 2.00 }, { "name": "ABC", "price": 3.00 } ] }, { "id": "1111", "name": "John Smith", "products": [ { "name": "RVS", "price": 2.00 }, { "name": "GHI", "price": 3.00 }, { "name": "QRS", "price": 4.00 } ] } ] }
注意事项
- 分组键必须选择层级的唯一标识(如员工号、客户ID),避免重复数据导致聚合错误
struct()函数用于映射嵌套对象的字段名,要严格匹配目标JSON的字段定义- 整个流程在Data Flow中串行执行,先完成内层产品聚合,再处理外层客户聚合
内容的提问来源于stack exchange,提问作者Susan
相关产品推荐
相关产品推荐

