Azure Data Factory中如何将键值对JSON数组转为JSON对象(Cosmos DB迁移)
在ADF数据流中实现Cosmos DB文档的数组转键值结构转换
以下是针对你的需求的具体ADF数据流操作步骤,适配动态Key场景:
步骤1:配置源数据集
连接到源Cosmos DB的Notes容器,确保数据流识别NoteDetails为数组类型(ADF会自动检测,若未识别可在源转换的Projection标签手动指定类型)。
步骤2:扁平化NoteDetails数组
添加Flatten转换,设置:
- 要扁平化的数组:选择
NoteDetails字段 - 保留根字段:勾选
id、ownerId、noteCategory(这些顶层字段需要保留,不随数组展开重复) - 执行后,每条原文档会拆分为多条记录,每条对应一个
NoteDetails元素,包含Key和Value字段。
步骤3:聚合生成键值对对象
添加Aggregate转换,实现将同一条原文档的拆分记录重新聚合:
- 分组依据:选择
id、ownerId、noteCategory(确保同原文档的记录归为一组) - 新增聚合列:命名为
normalizedNoteDetails,使用表达式:
该函数会把分组内所有mapFromArrays(collect(Key), collect(Value))Key收集为一个数组,所有Value收集为另一个数组,再将两者映射为键值对对象,完美匹配你需要的结构。
步骤4:清理字段
添加Select转换,仅保留最终需要的字段:id、ownerId、noteCategory、normalizedNoteDetails,移除临时生成的Key、Value字段。
步骤5:配置目标数据集
连接到目标Cosmos DB容器,设置写入行为(如Upsert更新现有文档,Insert插入新文档),确保目标容器的序列化格式为JSON。
验证转换结果
在数据流的Data Preview中依次查看每个转换的输出:
- Flatten后:每条记录对应一个
NoteDetails元素+根字段 - Aggregate后:每条记录对应原文档结构,
normalizedNoteDetails为目标键值对对象 - Select后:仅保留目标字段,结构与预期完全一致
内容的提问来源于stack exchange,提问作者AKK
相关产品推荐
相关产品推荐

